Changeset 8139 for branches/2017/dev_r8126_UKMO_AGRIF_vert_interp/NEMOGCM/EXTERNAL/AGRIF/LIB/toamr.c
- Timestamp:
- 2017-06-05T12:05:17+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8126_UKMO_AGRIF_vert_interp/NEMOGCM/EXTERNAL/AGRIF/LIB/toamr.c
r5656 r8139 47 47 "tabvars_i" // v_catvar == 4 48 48 }; 49 49 50 return tname[var->v_catvar]; // v_catvar should never be ouside the range [0:4]. 50 51 } … … 137 138 static char tname_1[LONG_C]; 138 139 static char tname_2[LONG_C]; 139 140 140 141 if ( iorindice == 0 ) sprintf(tname_1, "Agrif_Gr %% %s(%d)", tabvarsname(var), var->v_indicetabvars); 141 142 else sprintf(tname_1, "Agrif_Gr %% %s(i)", tabvarsname(var)); 142 143 143 if (!strcasecmp(var->v_typevar, " REAL"))144 if (!strcasecmp(var->v_typevar, "real")) 144 145 { 145 146 if ( !strcasecmp(var->v_nameinttypename,"8") ) sprintf(tname_2, "%% darray%d", var->v_nbdim); 146 147 else if ( !strcasecmp(var->v_nameinttypename,"4") ) sprintf(tname_2, "%% sarray%d", var->v_nbdim); 147 else sprintf(tname_2, "%% array%d", var->v_nbdim); 148 else if ( !strcasecmp(var->v_precision,"8") ) sprintf(tname_2, "%% darray%d", var->v_nbdim); 149 else if ( !strcasecmp(var->v_precision,"4") ) sprintf(tname_2, "%% sarray%d", var->v_nbdim); 150 else 151 { 152 sprintf(tname_2, "%% array%d", var->v_nbdim); 153 } 148 154 } 149 155 else if (!strcasecmp(var->v_typevar, "integer")) … … 195 201 if (!strcasecmp(var->v_typevar, "REAL")) 196 202 { 197 if ( !strcasecmp(var->v_nameinttypename,"8") ) sprintf(tname_2, "%% darray%d", var->v_nbdim); 198 else if ( !strcasecmp(var->v_nameinttypename,"4") ) sprintf(tname_2, "%% sarray%d", var->v_nbdim); 199 else sprintf(tname_2, "%% array%d", var->v_nbdim); 203 if ( !strcasecmp(var->v_nameinttypename,"8") ) sprintf(tname_2, "darray%d", var->v_nbdim); 204 else if ( !strcasecmp(var->v_nameinttypename,"4") ) sprintf(tname_2, "sarray%d", var->v_nbdim); 205 else if ( !strcasecmp(var->v_precision,"8") ) sprintf(tname_2, "darray%d", var->v_nbdim); 206 else if ( !strcasecmp(var->v_precision,"4") ) sprintf(tname_2, "sarray%d", var->v_nbdim); 207 else sprintf(tname_2, "array%d", var->v_nbdim); 200 208 } 201 209 else if (!strcasecmp(var->v_typevar, "INTEGER")) 202 210 { 203 sprintf(tname_2, " %%iarray%d", var->v_nbdim);211 sprintf(tname_2, "iarray%d", var->v_nbdim); 204 212 } 205 213 else if (!strcasecmp(var->v_typevar, "LOGICAL")) 206 214 { 207 sprintf(tname_2, " %%larray%d", var->v_nbdim);215 sprintf(tname_2, "larray%d", var->v_nbdim); 208 216 } 209 217 else if (!strcasecmp(var->v_typevar, "CHARACTER")) 210 218 { 211 219 WARNING_CharSize(var); 212 sprintf(tname_2, "%% carray%d", var->v_nbdim); 213 } 214 strcat(tname_1, tname_2); 220 sprintf(tname_2, "carray%d", var->v_nbdim); 221 } 222 if (var->v_pointerdeclare) 223 { 224 strcat(tname_1,"%p"); 225 strcat(tname_1, tname_2); 226 } 227 else 228 { 229 strcat(tname_1,"%"); 230 strcat(tname_1, tname_2); 231 } 215 232 } 216 233 Save_Length(tname_1, 46); … … 232 249 233 250 sprintf(tname_1, "(%d)", var->v_indicetabvars); 234 235 if (!strcasecmp (var->v_typevar, "REAL")) 236 { 237 if ( !strcasecmp(var->v_nameinttypename,"8") ) sprintf(tname_2, "%% darray%d", var->v_nbdim); 238 else if ( !strcasecmp(var->v_nameinttypename,"4") ) sprintf(tname_2, "%% sarray%d", var->v_nbdim); 239 else sprintf(tname_2, "%% array%d", var->v_nbdim); 240 } 241 else if (!strcasecmp(var->v_typevar, "INTEGER")) 242 { 243 sprintf(tname_2, "%% iarray%d", var->v_nbdim); 244 } 245 else if (!strcasecmp(var->v_typevar, "LOGICAL")) 246 { 247 sprintf(tname_2, "%% larray%d", var->v_nbdim); 248 } 249 else if (!strcasecmp(var->v_typevar, "CHARACTER")) 250 { 251 WARNING_CharSize(var); 252 sprintf(tname_2, "%% carray%d", var->v_nbdim); 253 } 254 255 strcat(tname_1, tname_2); 251 252 if (!strcasecmp(var->v_typevar, "REAL")) 253 { 254 if ( !strcasecmp(var->v_nameinttypename,"8") ) sprintf(tname_2, "darray%d", var->v_nbdim); 255 else if ( !strcasecmp(var->v_nameinttypename,"4") ) sprintf(tname_2, "sarray%d", var->v_nbdim); 256 else if ( !strcasecmp(var->v_precision,"8") ) sprintf(tname_2, "darray%d", var->v_nbdim); 257 else if ( !strcasecmp(var->v_precision,"4") ) sprintf(tname_2, "sarray%d", var->v_nbdim); 258 else sprintf(tname_2, "array%d", var->v_nbdim); 259 } 260 else if (!strcasecmp(var->v_typevar, "INTEGER")) 261 { 262 sprintf(tname_2, "iarray%d", var->v_nbdim); 263 } 264 else if (!strcasecmp(var->v_typevar, "LOGICAL")) 265 { 266 sprintf(tname_2, "larray%d", var->v_nbdim); 267 } 268 else if (!strcasecmp(var->v_typevar, "CHARACTER")) 269 { 270 WARNING_CharSize(var); 271 sprintf(tname_2, "carray%d", var->v_nbdim); 272 } 273 if (var->v_pointerdeclare) 274 { 275 strcat(tname_1,"%p"); 276 strcat(tname_1, tname_2); 277 } 278 else 279 { 280 strcat(tname_1,"%"); 281 strcat(tname_1, tname_2); 282 } 283 256 284 Save_Length(tname_1, 46); 257 285 … … 535 563 listvar *parcoursprec; 536 564 listvar *parcours1; 565 listname *parcours_name; 566 listname *parcours_name_array; 567 listdoloop *parcours_loop; 537 568 FILE *allocationagrif; 538 569 FILE *paramtoamr; 539 570 char ligne[LONG_M]; 540 571 char ligne2[LONG_M]; 572 char ligne3[LONG_M]; 541 573 variable *v; 542 574 int IndiceMax; … … 550 582 listindice *parcoursindic; 551 583 int i; 584 int nb_initial; 585 int is_parameter_local; 586 int global_check; 552 587 553 588 parcoursprec = (listvar *) NULL; … … 561 596 sprintf(ligne,"alloc_agrif_%s.h",parcours_nom->o_nom); 562 597 allocationagrif = open_for_write(ligne); 598 563 599 fprintf(allocationagrif,"#include \"Param_toamr_%s.h\" \n", parcours_nom->o_nom); 564 565 600 sprintf(ligne,"Param_toamr_%s.h",parcours_nom->o_nom); 566 601 paramtoamr = open_for_write(ligne); … … 568 603 list_indic = (listindice **) calloc(NB_CAT_VARIABLES,sizeof(listindice *)); 569 604 570 //shouldincludempif = 1 ;605 shouldincludempif = 1 ; 571 606 parcours = List_Common_Var; 572 607 while ( parcours ) … … 621 656 IndiceMin = parcours->var->v_indicetabvars; 622 657 IndiceMax = parcours->var->v_indicetabvars+compteur; 623 sprintf(ligne," allocate(%s", vargridnametabvars(v,1));658 sprintf(ligne," if (.not. allocated(%s)) allocate(%s", vargridnametabvars(v,1), vargridnametabvars(v,1)); 624 659 sprintf(ligne2,"%s)", vargridparam(v)); 625 660 strcat(ligne,ligne2); … … 639 674 else 640 675 { 641 sprintf(ligne," allocate(%s", vargridnametabvars(v,0));676 sprintf(ligne,"if (.not. allocated(%s)) allocate(%s", vargridnametabvars(v,0), vargridnametabvars(v,0)); 642 677 sprintf(ligne2,"%s)", vargridparam(v)); 643 678 strcat(ligne,ligne2); … … 648 683 list_indic[parcours->var->v_catvar] = parcoursindic; 649 684 } 650 neededparameter = writedeclarationintoamr(List_Parameter_Var, 651 paramtoamr,v,parcours_nom->o_nom,neededparameter,v->v_commonname); 685 686 global_check = 0; 687 is_parameter_local = writedeclarationintoamr(List_Parameter_Var, 688 paramtoamr,v,parcours_nom->o_nom,&neededparameter,v->v_commonname,global_check); 689 if (is_parameter_local == 0) 690 { 691 global_check = 1; 692 is_parameter_local = writedeclarationintoamr(List_GlobalParameter_Var, 693 paramtoamr,v,parcours_nom->o_nom,&neededparameter,v->v_commonname,global_check); 694 } 652 695 } 653 696 } /* end of the allocation part */ 654 697 /* INITIALISATION */ 655 if ( strcasecmp(v->v_initialvalue,"") ) 698 if ( v->v_initialvalue ) 699 { 700 parcours_name = v->v_initialvalue; 701 parcours_name_array = v->v_initialvalue_array; 702 if (parcours_name_array) 703 { 704 while (parcours_name) 656 705 { 657 706 strcpy(ligne, vargridnametabvars(v,0)); 707 if (parcours_name_array) 708 { 709 if (strcasecmp(parcours_name_array->n_name,"") ) 710 { 711 sprintf(ligne2,"(%s)",parcours_name_array->n_name); 712 strcat(ligne,ligne2); 713 } 714 } 658 715 /* We should modify the initialvalue in the case of variable has been defined with others variables */ 659 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName( v->v_initialvalue,List_Global_Var));660 if ( !strcasecmp(initialvalue, v->v_initialvalue) )661 { 662 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName( v->v_initialvalue,List_Common_Var));663 } 664 if ( !strcasecmp(initialvalue, v->v_initialvalue) )665 { 666 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName( v->v_initialvalue,List_ModuleUsed_Var));716 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_Global_Var)); 717 if ( !strcasecmp(initialvalue,parcours_name->n_name) ) 718 { 719 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_Common_Var)); 720 } 721 if ( !strcasecmp(initialvalue,parcours_name->n_name) ) 722 { 723 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_ModuleUsed_Var)); 667 724 } 668 725 strcat (ligne," = "); 669 726 670 if (v->v_nbdim == 0)727 if (v->v_nbdim >= 0) 671 728 { 672 729 strcpy(ligne2,initialvalue); … … 678 735 strcat(ligne,ligne2); 679 736 tofich(allocationagrif,ligne,1); 737 738 parcours_name = parcours_name->suiv; 739 if (parcours_name_array) parcours_name_array = parcours_name_array->suiv; 740 } 741 } 742 else 743 { 744 strcpy(ligne, vargridnametabvars(v,0)); 745 strcat (ligne," = "); 746 strcpy(ligne2,""); 747 nb_initial = 0; 748 749 while (parcours_name) 750 { 751 nb_initial = nb_initial + 1; 752 /* We should modify the initialvalue in the case of variable has been defined with others variables */ 753 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_Global_Var)); 754 if ( !strcasecmp(initialvalue,parcours_name->n_name) ) 755 { 756 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_Common_Var)); 757 } 758 if ( !strcasecmp(initialvalue,parcours_name->n_name) ) 759 { 760 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_ModuleUsed_Var)); 761 } 762 763 strcat(ligne2,initialvalue); 764 if (parcours_name->suiv) 765 { 766 strcat(ligne2,","); 767 } 768 769 parcours_name = parcours_name->suiv; 770 } 771 if (nb_initial > 1) 772 { 773 sprintf(ligne3,"reshape((/%s/),shape(%s))",ligne2,vargridnametabvars(v,0)); 774 } 775 else 776 { 777 strcpy(ligne3,ligne2); 778 } 779 strcat(ligne,ligne3); 780 tofich(allocationagrif,ligne,1); 781 } 680 782 } 681 783 } … … 705 807 char ligne[LONG_M]; 706 808 char ligne2[LONG_M]; 809 char ligne3[LONG_M]; 810 listname *parcours_name; 811 listname *parcours_name_array; 707 812 variable *v; 708 813 int IndiceMax; … … 714 819 char initialvalue[LONG_M]; 715 820 int typeiswritten ; 821 int nb_initial; 716 822 717 823 parcoursprec = (listvar *) NULL; … … 794 900 IndiceMin = parcours->var->v_indicetabvars; 795 901 IndiceMax = parcours->var->v_indicetabvars+compteur; 796 sprintf(ligne," allocate(%s", vargridnametabvars(v,1));902 sprintf(ligne," if (.not. allocated(%s)) allocate(%s", vargridnametabvars(v,1), vargridnametabvars(v,1)); 797 903 sprintf(ligne2,"%s)", vargridparam(v)); 798 904 strcat(ligne,ligne2); … … 803 909 else 804 910 { 805 sprintf(ligne," allocate(%s", vargridnametabvars(v,0));911 sprintf(ligne,"if (.not. allocated(%s)) allocate(%s", vargridnametabvars(v,0), vargridnametabvars(v,0)); 806 912 sprintf(ligne2,"%s)", vargridparam(v)); 807 913 strcat(ligne,ligne2); … … 811 917 } /* end of the allocation part */ 812 918 /* INITIALISATION */ 813 if ( strcasecmp(v->v_initialvalue,"") ) 919 920 if ( v->v_initialvalue ) 921 { 922 parcours_name = v->v_initialvalue; 923 parcours_name_array = v->v_initialvalue_array; 924 if (parcours_name_array) 925 { 926 while (parcours_name) 814 927 { 815 928 strcpy(ligne, vargridnametabvars(v,0)); 929 if (parcours_name_array) 930 { 931 if (strcasecmp(parcours_name_array->n_name,"") ) 932 { 933 sprintf(ligne2,"(%s)",parcours_name_array->n_name); 934 strcat(ligne,ligne2); 935 } 936 } 816 937 /* We should modify the initialvalue in the case of variable has been defined with others variables */ 817 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName( v->v_initialvalue,List_Global_Var));818 if ( !strcasecmp(initialvalue, v->v_initialvalue) )819 { 820 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName( v->v_initialvalue,List_Common_Var));821 } 822 if ( !strcasecmp(initialvalue, v->v_initialvalue) )823 { 824 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName( v->v_initialvalue,List_ModuleUsed_Var));938 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_Global_Var)); 939 if ( !strcasecmp(initialvalue,parcours_name->n_name) ) 940 { 941 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_Common_Var)); 942 } 943 if ( !strcasecmp(initialvalue,parcours_name->n_name) ) 944 { 945 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_ModuleUsed_Var)); 825 946 } 826 947 strcat (ligne," = "); 827 strcat (ligne,initialvalue); 828 Save_Length(ligne,48); 948 949 if (v->v_nbdim >= 0) 950 { 951 strcpy(ligne2,initialvalue); 952 } 953 else 954 { 955 sprintf(ligne2,"reshape(%s,shape(%s))",initialvalue,vargridnametabvars(v,0)); 956 } 957 strcat(ligne,ligne2); 829 958 tofich(allocationagrif,ligne,1); 959 960 parcours_name = parcours_name->suiv; 961 if (parcours_name_array) parcours_name_array = parcours_name_array->suiv; 962 } 963 } 964 else 965 { 966 strcpy(ligne, vargridnametabvars(v,0)); 967 strcat (ligne," = "); 968 strcpy(ligne2,""); 969 nb_initial = 0; 970 971 while (parcours_name) 972 { 973 nb_initial = nb_initial + 1; 974 /* We should modify the initialvalue in the case of variable has been defined with others variables */ 975 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_Global_Var)); 976 if ( !strcasecmp(initialvalue,parcours_name->n_name) ) 977 { 978 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_Common_Var)); 979 } 980 if ( !strcasecmp(initialvalue,parcours_name->n_name) ) 981 { 982 strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName(parcours_name->n_name,List_ModuleUsed_Var)); 983 } 984 985 strcat(ligne2,initialvalue); 986 if (parcours_name->suiv) 987 { 988 strcat(ligne2,","); 989 } 990 991 parcours_name = parcours_name->suiv; 992 } 993 if (nb_initial > 1) 994 { 995 sprintf(ligne3,"reshape((/%s/),shape(%s))",ligne2,vargridnametabvars(v,0)); 996 } 997 else 998 { 999 strcpy(ligne3,ligne2); 1000 } 1001 strcat(ligne,ligne3); 1002 tofich(allocationagrif,ligne,1); 1003 } 830 1004 } 831 1005 }
Note: See TracChangeset
for help on using the changeset viewer.