Hi,
I updated slightly your subroutine, please find my comments:
1. To exchange data between UMESHMOTION & UFIELD I am using common block “kExchData”
2. For your information each common block name must start from k letter. See Abaqus Analysis User's Manual, 18.1.1 User subroutines: overview, Naming convention
3. Since I am using common block you must not use more than 1 CPU. In other words you cannot use memory parallel execution.
4. UFIELD is called before UMESHMOTION, it means in n increment you will always get results from n-1 increment. It can have influence for you results to avoid it cut your time step to decrease time difference between n and n-1 increment.
5. Common block has two one-dimension arrays. In one I store node ids in other contact slip values.
6. Max arrays size is set with “iNodeNum” parameter. You must always set value enough big to store all you data. It should be number of you nodes associated with UMESHMOTION or bigger.
7. Position in the array is used as reference between the arrays. If node 100 is in position 45 in first array it means cslip for this node is on position 45 in second array.
8. I do not have experience with UMESHMOTION but I noticed Abaqus call the subroutine two times for each node. Kmeshseep argument is different for these calls. I just store values for first call and do not carry about second. I do not know what exactly is difference between the calls. It looks like the results are the same (but it does not have to be true). Maybe you do not want to use only results from first call, maybe you would like use average value of cslip from all calls.
9. I have to say node number are a little bit confuse for me. It is because I never use model in term of instances and assembly. I understand that in your case node numbers in the inputdeck can be different that nodes during execution since you can have the same nodes numbers in difference instances. Nevertheless there is something I do not understand. What node should I use for GETNODETOELEMCONN & GETVRMAVGATNODE routines. Should it be global or local. Should it be “node” variable or “locnum”. The point is that I find example with UMESHMOTION in documentation and they are using “node” variable but when I am using this the routines crashed with error (JRCD is not zero). But if I use “locnum” is always ok. I do not know. And another question is does “node” in UMESHMOTION is the same as “node” in UFIELD? Maybe in one subroutine it is global id and in another is local.
10. I have to be honest I did not test the subroutine well. So please do it. My suggestion is to use simple model (4-5 elements max) and maybe do not use instances then there will be no question about nodes ids.
Please check the files, test them and if you have any questions do not hesitate to contact with me.
Regards,
Bartosz