コード例 #1
0
ファイル: SubLoopCreation.c プロジェクト: xinpianyu72/nemo
void WriteHeadofSubroutineLoop()
{
   char ligne[LONG_40M];
   FILE * subloop;

   if ( todebug == 1 ) printf("Enter in WriteHeadofSubroutineLoop\n");
   tofich(fortranout,"\n",1);
   /* Open this newfile                                                       */
   sprintf(ligne,"Sub_Loop_%s.h",subroutinename);
   subloop = associate(ligne);
   /*                                                                         */
   if (isrecursive) 
   {
   sprintf(ligne,"      recursive subroutine Sub_Loop_%s(",subroutinename);
   }
   else
   {
   sprintf(ligne,"      subroutine Sub_Loop_%s(",subroutinename);
   }
   /*                                                                         */
   WriteVariablelist_subloop(subloop,ligne);
   WriteVariablelist_subloop_Def(subloop,ligne);
   /*                                                                         */
     strcat(ligne,")");
   tofich(subloop,ligne,1);
   /* if USE agrif_Uti l should be add                                        */
   AddUseAgrifUtil_0(subloop);
   /*                                                                         */
   oldfortranout = fortranout;
   fortranout = subloop;
   if ( todebug == 1 ) printf("Out of WriteHeadofSubroutineLoop\n");
}
コード例 #2
0
ファイル: toamr.c プロジェクト: xinpianyu72/nemo
void write_Getnumberofcells_file(char *name)
{
  char ligne[LONG_C];
  FILE *getnumberofcells;

  if ( IndicenbmaillesX != 0 )
  {
  getnumberofcells=associate(name);
  sprintf (ligne,
           "Agrif_Curgrid %% tabvars(%d) %% var %% iarray0 = Agrif_Gr %% nb(1)",
           IndicenbmaillesX);
  tofich (getnumberofcells, ligne,1);
  if (dimprob > 1)
    {
      sprintf (ligne,
           "Agrif_Curgrid %% tabvars(%d) %% var %% iarray0 = Agrif_Gr %% nb(2)",
           IndicenbmaillesY);
      tofich (getnumberofcells, ligne,1);
    }
  if (dimprob > 2)
    {
      sprintf (ligne,
           "Agrif_Curgrid %% tabvars(%d) %% var %% iarray0 = Agrif_Gr %% nb(3)",
           IndicenbmaillesZ);
      tofich (getnumberofcells, ligne,1);
    }
  fclose (getnumberofcells);
  }
}
コード例 #3
0
ファイル: toamr.c プロジェクト: xinpianyu72/nemo
void write_Setnumberofcells_file(char *name)
{
  char ligne[LONG_C];
  FILE *setnumberofcells;

  if ( IndicenbmaillesX != 0 )
  {
  setnumberofcells=associate(name);

  if (onlyfixedgrids != 1 )
  {
  sprintf (ligne,
           "Agrif_Gr %% nb(1) = Agrif_Gr %% tabvars(%d) %% var %% iarray0",
           IndicenbmaillesX);
  }
  else
  {
  sprintf (ligne,
           "Agrif_Gr %% nb(1) = Agrif_Curgrid %% tabvars(%d) %% var %% iarray0",
           IndicenbmaillesX);
  }
  tofich (setnumberofcells, ligne,1);
  if (dimprob > 1)
  {
     if (onlyfixedgrids != 1 )
     {
     sprintf (ligne,
           "Agrif_Gr %% nb(2) = Agrif_Gr %% tabvars(%d) %% var %% iarray0",
           IndicenbmaillesY);
     }
     else
     {
     sprintf (ligne,
           "Agrif_Gr %% nb(2) = Agrif_Curgrid %% tabvars(%d) %% var %% iarray0",
           IndicenbmaillesY);
     }

     tofich (setnumberofcells, ligne,1);
  }
  if (dimprob > 2)
  {
     if (onlyfixedgrids != 1 )
     {
     sprintf (ligne,
           "Agrif_Gr %% nb(3) = Agrif_Gr %% tabvars(%d) %% var %% iarray0",
           IndicenbmaillesZ);
     }
     else
     {
     sprintf (ligne,
           "Agrif_Gr %% nb(3) = Agrif_Curgrid %% tabvars(%d) %% var %% iarray0",
           IndicenbmaillesZ);
     }
     tofich (setnumberofcells, ligne,1);
  }

  fclose (setnumberofcells);
  }
}
コード例 #4
0
ファイル: SubLoopCreation.c プロジェクト: xinpianyu72/nemo
void closeandcallsubloopandincludeit_0(int suborfun)
{
   char ligne[LONG_40M];

   if ( firstpass == 0 )
   {

   if ( todebug == 1 ) printf("Enter in closeandcallsubloopandincludeit_0\n");
   if ( IsTabvarsUseInArgument_0() == 1 )
   {
      /* We should remove the key word end subroutine                         */
      RemoveWordCUR_0(fortranout,(long)(-(pos_cur-pos_endsubroutine)),
                                          pos_cur-pos_endsubroutine);
      /* We should close the loop subroutine                                  */
      sprintf(ligne,"\n      end subroutine Sub_Loop_%s",subroutinename);
      tofich(fortranout,ligne,1);
      fclose(fortranout);
      fortranout = oldfortranout;


      AddUseAgrifUtilBeforeCall_0(fortranout);
      if ( functiondeclarationisdone == 0 ) WriteFunctionDeclaration(0);
      WriteArgumentDeclaration_beforecall();
      if ( !strcasecmp(subofagrifinitgrids,subroutinename) )
                     fprintf(oldfortranout,"      Call Agrif_Init_Grids () \n");
      /* Now we add the call af the new subroutine                            */
      sprintf(ligne,"\n      Call Sub_Loop_%s( ",subroutinename);
      /* Write the list of the local variables used in this new subroutine    */
      WriteVariablelist_subloop(fortranout,ligne);
      /* Write the list of the global tables used in this new subroutine      */
      /*    in doloop                                                         */
      WriteVariablelist_subloop_Call(fortranout,ligne);
      /* Close the parenthesis of the new subroutine called                   */
       strcat(ligne,")");
      
      tofich(fortranout,ligne,1);

      /* We should close the original subroutine                              */
      if ( suborfun == 3 ) sprintf(ligne,"\n      end program %s"
                                                               ,subroutinename);
      if ( suborfun == 2 ) sprintf(ligne,"\n      end");
      if ( suborfun == 1 ) sprintf(ligne,"\n      end subroutine %s"
                                                               ,subroutinename);
      if ( suborfun == 0 ) sprintf(ligne,"\n      end function %s"
                                                               ,subroutinename);
      tofich(fortranout,ligne,1);
      /* we should include the above file in the original code                */
      sprintf(ligne,"\n#include \"Sub_Loop_%s.h\" \n",subroutinename);
      tofich(fortranout,ligne,1);
      }
    oldfortranout = (FILE *)NULL;      
   if ( todebug == 1 ) printf("Out of closeandcallsubloopandincludeit_0\n");
   }
   
}
コード例 #5
0
ファイル: SubLoopCreation.c プロジェクト: xinpianyu72/nemo
void closeandcallsubloop_contains_0()
{
   char ligne[LONG_40M];

   if ( firstpass == 0 )
   {
   if ( todebug == 1 ) printf("Enter in closeandcallsubloopandincludeit_0\n");
   if ( IsTabvarsUseInArgument_0() == 1 )
   {
      Remove_Word_Contains_0();
      sprintf(ligne,"\n      end subroutine Sub_Loop_%s",subroutinename);
      tofich(fortranout,ligne,1);
      fclose(fortranout);
      fortranout = oldfortranout;

      AddUseAgrifUtilBeforeCall_0(fortranout);
      if ( ImplicitNoneInSubroutine() == 1 ) fprintf(fortranout,
                                                       "      IMPLICIT NONE\n");
      WriteLocalParamDeclaration();
      if ( functiondeclarationisdone == 0 ) WriteFunctionDeclaration(0);
      WriteArgumentDeclaration_beforecall();
      WriteSubroutineDeclaration(0);
      if ( !strcasecmp(subofagrifinitgrids,subroutinename) )
                     fprintf(oldfortranout,"      Call Agrif_Init_Grids () \n");
      /* Now we add the call af the new subroutine                            */
      if ( retour77 == 0 ) sprintf(ligne,"\n      Call Sub_Loop_%s( &"
                                                               ,subroutinename);
      else sprintf(ligne,"\n      Call Sub_Loop_%s( ",subroutinename);
      fprintf(fortranout,ligne);
      /* Write the list of the local variables used in this new subroutine    */
      WriteVariablelist_subloop(fortranout,ligne);
      /* Write the list of the global tables used in this new subroutine      */
      /*    in doloop                                                         */
      WriteVariablelist_subloop_Call(fortranout,ligne);
      /* Close the parenthesis of the new subroutine called                   */
      sprintf(ligne,")");
      tofich(fortranout,ligne,1);
      /* We should close the original subroutine                              */
      sprintf(ligne,"\n      contains");
      tofich(fortranout,ligne,1);
      /* we should include the above file in the original code                */
      sprintf(ligne,"\n#include \"Sub_Loop_%s.h\" \n",subroutinename);
      tofich(fortranout,ligne,1);
      }
   oldfortranout = (FILE *)NULL;
   if ( todebug == 1 ) printf("Out of closeandcallsubloopandincludeit_0\n");
   }
}
コード例 #6
0
ファイル: toamr.c プロジェクト: xinpianyu72/nemo
void write_probdimagrif_file()
{
  FILE *probdim;
  char ligne[LONG_C];

  probdim = associate("probdim_agrif.h");
  sprintf (ligne, "Agrif_Probdim = %d", dimprob);
  tofich (probdim, ligne,1);
  fclose (probdim);
}
コード例 #7
0
ファイル: toamr.c プロジェクト: xinpianyu72/nemo
void write_modtypeagrif_file()
{
  char ligne[LONG_C];
  FILE *typedata;

  typedata = associate ("modtype_agrif.h");
  /* AGRIF_NbVariables : number of variables                                  */
  sprintf (ligne, "AGRIF_NbVariables = %d",indicemaxtabvars);
  tofich(typedata,ligne,1);
  fclose (typedata);
}
コード例 #8
0
ファイル: toamr.c プロジェクト: xinpianyu72/nemo
void write_createvarnameagrif_file(variable *v,FILE *createvarname,
                                                       int *InitEmpty)
{
  char ligne[LONG_C];
  char *tmp;
  char temp1[LONG_C];

  tmp =  variablenametabvars(v,0);
  strcpy (temp1, tmp);
  if ( todebugfree == 1 ) free(tmp);

  *InitEmpty = 0 ;
  sprintf(ligne, "%s %% namevar = \"%s\"",temp1,v->v_nomvar);
  tofich(createvarname,ligne,1);
}
コード例 #9
0
ファイル: toamr.c プロジェクト: xinpianyu72/nemo
void write_initialisationsagrif_file(variable *v,FILE *initproc,
                                     int *VarnameEmpty)
{
  char ligne[LONG_C];
  char temp1[LONG_C];
  char *tmp;

  tmp = variablenameroottabvars (v);
  strcpy (temp1, tmp);
  if ( todebugfree == 1 ) free(tmp);

  if ( v->v_nbdim != 0 )
  {
     *VarnameEmpty = 0 ;
     sprintf (ligne, "%s %% nbdim = %d", temp1, v->v_nbdim);
     tofich (initproc, ligne,1);
  }
}
コード例 #10
0
ファイル: UtilListe.c プロジェクト: ducousso/CROCO-NH
void writelistpublic(listname *lin)
{
    listname *parcours1;
    char ligne[LONG_M];

    if (lin)
    {
        sprintf(ligne,"public :: ");
        parcours1 = lin;

        while ( parcours1 )
        {
            strcat(ligne, parcours1->n_name);
            if ( parcours1->suiv ) strcat(ligne,", ");
            parcours1 = parcours1->suiv;
        }
        tofich(fortran_out,ligne,1);
    }
}
コード例 #11
0
ファイル: toamr.c プロジェクト: xinpianyu72/nemo
void write_allocation_Global_0()
{
   listnom *parcours_nom;
   listvar *parcours;
   listvar *parcoursprec;
   listvar *parcours1;
   FILE *allocationagrif;
   char ligne[LONGNOM];
   variable *v;
   int IndiceMax;
   int IndiceMin;
   int compteur;
   int out;
   int indiceprec;
   int ValeurMax;
   char initialvalue[LONG_4C];
   int typeiswritten ;

   parcoursprec = (listvar *)NULL;
   parcours_nom = List_NameOfModule;
   ValeurMax = 2;
   while ( parcours_nom  )
   {
      /*                                                                      */
      if ( parcours_nom->o_val == 1 )
      {
         IndiceMax = 0;
         IndiceMin = indicemaxtabvars;
         /* Open the file to create the Alloc_agrif subroutine                */
         sprintf(ligne,"alloc_agrif_%s.h",parcours_nom->o_nom);
         allocationagrif = associate (ligne);
         /*                                                                   */
         if ( ModuleIsDefineInInputFile(parcours_nom->o_nom) == 1 )
         {
             /* add the call to initworkspace                                 */
            tofich(allocationagrif,"if ( .NOT. Agrif_Root() ) then ",1);
            fprintf(allocationagrif,"#include \"GetNumberofcells.h\" \n");
            tofich(allocationagrif,"else ",1);
            fprintf(allocationagrif,"#include \"SetNumberofcells.h\" \n");
            tofich(allocationagrif,"endif ",1);
            tofich(allocationagrif,"Call Agrif_InitWorkspace ",1);
         }

         typeiswritten = 0;

         parcours = List_Global_Var;
         while ( parcours )
         {
            if ( !strcasecmp(parcours->var->v_modulename,parcours_nom->o_nom) &&
                 parcours->var->v_VariableIsParameter == 0                  &&
                 parcours->var->v_notgrid == 0                              &&
                 !strcasecmp(parcours->var->v_modulename,parcours_nom->o_nom)  )
            {
               /***************************************************************/
               /***************************************************************/
               /***************************************************************/
               v = parcours->var;
               IndiceMax = 0;
               IndiceMin = indicemaxtabvars;
  /* body of the file                                                         */
  if ( !strcasecmp(v->v_commoninfile,mainfile) )
  {
     if (onlyfixedgrids != 1 && v->v_nbdim!=0)
     {
        strcpy (ligne, "If (.not. associated(");
        strcat (ligne, vargridnametabvars(v,0));
        strcat (ligne, "))                       then");
        Save_Length(ligne,48);
        tofich (allocationagrif, ligne,1);
     }
     if ( v->v_allocatable != 1 && ( v->v_dimsempty != 1) )
     {
        /*                ALLOCATION                                          */
        if ( v->v_dimension != 0  )
        {
           if ( v->v_indicetabvars < IndiceMin ||
                v->v_indicetabvars > IndiceMax )
           {
              parcours1 = parcours;
              compteur = -1;
              out = 0;
              indiceprec = parcours->var->v_indicetabvars -1 ;
              while ( parcours1 && out == 0 &&
                      !strcasecmp(  parcours->var->v_readedlistdimension,
                                  parcours1->var->v_readedlistdimension) &&
                      !strcasecmp(  parcours->var->v_typevar,
                                  parcours1->var->v_typevar) &&
                             ( parcours1->var->v_indicetabvars == indiceprec+1 )
                     )
              {

               if ( !strcasecmp(parcours1->var->v_modulename,
                                parcours_nom->o_nom) ||
                    !strcasecmp(parcours1->var->v_commonname,
                                parcours_nom->o_nom) )
                 {
                      compteur = compteur +1 ;
                      indiceprec = parcours1->var->v_indicetabvars;
                      parcoursprec = parcours1;
                      parcours1 = parcours1->suiv;
                 }
                 else out = 1;
              }
              if ( compteur > ValeurMax )
              {
                 fprintf(allocationagrif,"      DO i = %d , %d\n",
                                          parcours->var->v_indicetabvars,
                                       parcours->var->v_indicetabvars+compteur);
                 IndiceMin = parcours->var->v_indicetabvars;
                 IndiceMax = parcours->var->v_indicetabvars+compteur;
                 strcpy (ligne, "allocate ");
                 strcat (ligne, "(");
                 strcat (ligne, vargridnametabvars(v,1));
                 strcat (ligne, vargridparam(v,0));
                 strcat (ligne, ")");
                 Save_Length(ligne,48);
                 tofich (allocationagrif, ligne,1);
                 fprintf(allocationagrif,"      end do\n");
                 parcours = parcoursprec;
              }
              else
              {
                 strcpy (ligne, "allocate ");
                 strcat (ligne, "(");
                 strcat (ligne, vargridnametabvars(v,0));
                 strcat (ligne, vargridparam(v,0));
                 strcat (ligne, ")");
                 Save_Length(ligne,48);
                 tofich (allocationagrif, ligne,1);
              }
           }
        } /* end of the allocation part                                       */

        /*                INITIALISATION                                      */
        if ( strcasecmp(v->v_initialvalue,"") )
        {
           strcpy (ligne, "");
           strcat (ligne, vargridnametabvars(v,0));
           /* We should modify the initialvalue in the case of variable has   */
           /*    been defined with others variables                           */

           strcpy(initialvalue,
                  ChangeTheInitalvaluebyTabvarsName
                                      (v->v_initialvalue,List_Global_Var,0));
           if ( !strcasecmp(initialvalue,v->v_initialvalue) )
           {
              strcpy(initialvalue,"");
              strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName
                                      (v->v_initialvalue,List_Common_Var,0));
           }
           if ( !strcasecmp(initialvalue,v->v_initialvalue) )
           {
              strcpy(initialvalue,"");
              strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName
                                     (v->v_initialvalue,List_ModuleUsed_Var,0));
           }
           strcat (ligne," = ");
           strcat (ligne,initialvalue);
           /*                                                                 */
           Save_Length(ligne,48);
           tofich (allocationagrif, ligne,1);
        }
     }
/* Case of structure types */
        if ((typeiswritten == 0) && !strcasecmp(v->v_typevar,"type"))
        {
        sprintf(ligne,"If (.Not.Allocated(Agrif_%s_var)) Then",v->v_modulename);
        tofich(allocationagrif, ligne, 1);
        sprintf(ligne,"Allocate(Agrif_%s_var(0:Agrif_NbMaxGrids))",v->v_modulename);
        tofich(allocationagrif, ligne, 1);
        strcpy(ligne,"End If");
        tofich(allocationagrif, ligne, 1);
        typeiswritten = 1;
        }
     if (onlyfixedgrids != 1 && v->v_nbdim!=0)
     {
        strcpy (ligne, "   End if");
        tofich (allocationagrif, ligne,1);
     }
  }
               /***************************************************************/
               /***************************************************************/
               /***************************************************************/
            }
            parcours = parcours -> suiv;
         }
         /*                                                                   */
         if ( ModuleIsDefineInInputFile(parcours_nom->o_nom) == 1 )
         {
            /* add the call to initworkspace                                  */
            tofich(allocationagrif,"if ( .NOT. Agrif_Root() ) then ",1);
            fprintf(allocationagrif,"#include \"GetNumberofcells.h\" \n");
            tofich(allocationagrif,"else ",1);
            fprintf(allocationagrif,"#include \"SetNumberofcells.h\" \n");
            tofich(allocationagrif,"endif ",1);
            tofich(allocationagrif,"Call Agrif_InitWorkspace ",1);
         }
         /* Close the file Alloc_agrif                                        */
         fclose(allocationagrif);
      } /* end parcours_nom == 1                                              */
      /*                                                                      */
      parcours_nom = parcours_nom -> suiv;
   }
}
コード例 #12
0
ファイル: toamr.c プロジェクト: xinpianyu72/nemo
void write_allocation_Common_0()
{
   listnom *parcours_nom;
   listnom *neededparameter;
   listvar *parcours;
   listvar *parcoursprec;
   listvar *parcours1;
   FILE *allocationagrif;
   FILE *paramtoamr;
   char ligne[LONGNOM];
   char ligne2[LONGNOM];   
   variable *v;
   int IndiceMax;
   int IndiceMin;
   int compteur;
   int out;
   int indiceprec;
   int ValeurMax;
   char initialvalue[LONG_4C];
   listindice *list_indic;
   listindice *parcoursindic;
   int i;

   parcoursprec = (listvar *)NULL;
   parcours_nom = List_NameOfCommon;
   ValeurMax = 2;
   while ( parcours_nom  )
   {
      /*                                                                      */
      if ( parcours_nom->o_val == 1 )
      {
         /* Open the file to create the Alloc_agrif subroutine                */
         sprintf(ligne,"alloc_agrif_%s.h",parcours_nom->o_nom);
         allocationagrif = associate (ligne);
         /*                                                                   */
         fprintf(allocationagrif,"#include \"Param_toamr_%s.h\" \n",
                                                           parcours_nom->o_nom);
         /*                                                                   */
         sprintf(ligne,"Param_toamr_%s.h",parcours_nom->o_nom);
         paramtoamr = associate (ligne);
         neededparameter = (listnom * )NULL;
         /*                                                                   */
         list_indic = (listindice *)NULL;
         /*                                                                   */
         shouldincludempif = 1 ;
         parcours = List_Common_Var;
         while ( parcours )
         {
            if ( !strcasecmp(parcours->var->v_commonname,parcours_nom->o_nom) &&
                  IndiceInlist(parcours->var->v_indicetabvars,list_indic) == 0
               )
            {
               /***************************************************************/
               /***************************************************************/
               /***************************************************************/
               v = parcours->var;
               IndiceMax = 0;
               IndiceMin = indicemaxtabvars;
  /* body of the file                                                         */
  if ( !strcasecmp(v->v_commoninfile,mainfile) )
  {
     if (onlyfixedgrids != 1 && v->v_nbdim!=0)
     {
        strcpy (ligne, "If (.not. associated(");
        strcat (ligne, vargridnametabvars(v,0));
        strcat (ligne, "))                       then");
        Save_Length(ligne,48);
        tofich (allocationagrif, ligne,1);
     }
     if ( v->v_allocatable != 1 && ( v->v_dimsempty != 1) )
     {
        /*                ALLOCATION                                          */
        if ( v->v_dimension != 0  )
        {
           if ( v->v_indicetabvars < IndiceMin ||
                v->v_indicetabvars > IndiceMax )
           {
              parcours1 = parcours;
              compteur = -1;
              out = 0;
              indiceprec = parcours->var->v_indicetabvars -1 ;
              while ( parcours1 && out == 0 &&
                      !strcasecmp(  parcours->var->v_readedlistdimension,
                                  parcours1->var->v_readedlistdimension) &&
                      !strcasecmp(  parcours->var->v_typevar,
                                  parcours1->var->v_typevar) &&
                            ( parcours1->var->v_indicetabvars == indiceprec+1 )
                     )
              {

               if ( !strcasecmp(parcours1->var->v_modulename,
                                parcours_nom->o_nom) ||
                    !strcasecmp(parcours1->var->v_commonname,
                                parcours_nom->o_nom) )
                 {
                      compteur = compteur +1 ;
                      indiceprec = parcours1->var->v_indicetabvars;
                      parcoursprec = parcours1;
                      parcours1 = parcours1->suiv;
                 }
                 else out = 1;
              }

              if ( compteur > ValeurMax )
              {
                 fprintf(allocationagrif,"      DO i = %d , %d\n",
                                         parcours->var->v_indicetabvars,
                                       parcours->var->v_indicetabvars+compteur);
                 IndiceMin = parcours->var->v_indicetabvars;
                 IndiceMax = parcours->var->v_indicetabvars+compteur;
                 strcpy (ligne, "allocate ");
                 strcat (ligne, "(");
                 strcat (ligne, vargridnametabvars(v,1));
                 strcat (ligne, vargridparam(v,0));
                 strcat (ligne, ")");
                 Save_Length(ligne,48);
                 tofich (allocationagrif, ligne,1);
                 fprintf(allocationagrif,"      end do\n");
                 i=parcours->var->v_indicetabvars;
                 do
                 {
                    parcoursindic =  (listindice *)malloc(sizeof(listindice));
                    parcoursindic -> i_indice = i;
                    parcoursindic -> suiv = list_indic;
                    list_indic = parcoursindic;
                    i = i + 1;
                 } while ( i <= parcours->var->v_indicetabvars+compteur );
                 parcours = parcoursprec;
                 /*                                                           */
              }
              else
              {
                 strcpy (ligne, "allocate ");
                 strcat (ligne, "(");
                 strcat (ligne, vargridnametabvars(v,0));
                 strcat (ligne, vargridparam(v,0));
                 strcat (ligne, ")");
                 Save_Length(ligne,48);
                 tofich (allocationagrif, ligne,1);
                 /*                                                           */
                 parcoursindic =  (listindice *)malloc(sizeof(listindice));
                 parcoursindic -> i_indice = parcours->var->v_indicetabvars;
                 parcoursindic -> suiv = list_indic;
                 list_indic = parcoursindic;
              }
                neededparameter = writedeclarationintoamr(List_Parameter_Var,
                              paramtoamr,v,parcours_nom->o_nom,neededparameter,
                                                               v->v_commonname);
              /*                                                              */
           }
        } /* end of the allocation part                                       */
        /*                INITIALISATION                                      */
        if ( strcasecmp(v->v_initialvalue,"") )
        {
           strcpy (ligne, "");
           strcat (ligne, vargridnametabvars(v,0));
           /* We should modify the initialvalue in the case of variable has   */
           /*    been defined with others variables                           */
                      
           strcpy(initialvalue,
                  ChangeTheInitalvaluebyTabvarsName
                                      (v->v_initialvalue,List_Global_Var,0));
           if ( !strcasecmp(initialvalue,v->v_initialvalue) )
           {
              strcpy(initialvalue,"");
              strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName
                                      (v->v_initialvalue,List_Common_Var,0));
           }
           if ( !strcasecmp(initialvalue,v->v_initialvalue) )
           {
              strcpy(initialvalue,"");
              strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName
                                     (v->v_initialvalue,List_ModuleUsed_Var,0));
           }
           strcat (ligne," = ");

           if (v->v_nbdim == 0)
           {
           strcpy(ligne2,initialvalue);
           }
           else
           {
           sprintf(ligne2,"RESHAPE(%s,SHAPE(%s))",initialvalue,vargridnametabvars(v,0));
           }
           strcat (ligne,ligne2);
           /*                                                                 */
           Save_Length(ligne,48);
           tofich (allocationagrif, ligne,1);
        }
     }
     if (onlyfixedgrids != 1 && v->v_nbdim!=0)
     {
        strcpy (ligne, "   End if");
        tofich (allocationagrif, ligne,1);
     }
  }
               /***************************************************************/
               /***************************************************************/
               /***************************************************************/
            }
            parcours = parcours -> suiv;
         }
         /* Close the file Alloc_agrif                                        */
         fclose(allocationagrif);
         fclose(paramtoamr);
      }
      /*                                                                      */
      parcours_nom = parcours_nom -> suiv;
   }

}
コード例 #13
0
ファイル: SubLoopCreation.c プロジェクト: xinpianyu72/nemo
void writeheadnewsub_0()
{
   char ligne[LONG_C];

   if ( firstpass == 0 && IsTabvarsUseInArgument_0() == 1 )
   {
      if ( todebug == 1 ) printf("Enter in writeheadnewsub_0\n");
      /* we should add the use agrif_uti l if it is necessary                 */
      WriteHeadofSubroutineLoop();
      WriteUsemoduleDeclaration(subroutinename);
      if ( ImplicitNoneInSubroutine() == 1 ) fprintf(fortranout,
                                                       "      IMPLICIT NONE\n");
      WriteIncludeDeclaration();
      /*                                                                      */
      /* We should write once the declaration of tables (extract              */
      /*    from pointer) in the new subroutine                               */
      if ( mark == 1 ) fprintf(fortranout,"!!! 000000000000000 \n");

      if ( SubInList_ContainsSubroutine() == 0 ) WriteLocalParamDeclaration();
      if ( mark == 1 ) fprintf(fortranout,"!!! 111111111111111 \n");

      sprintf(ligne,"\n#include \"ParamFile%s.h\" \n",subroutinename);
      tofich(fortranout,ligne,1);

      WriteArgumentDeclaration_Sort();

      if ( mark == 1 ) fprintf(fortranout,"!!! 222222222222222 \n");
      writesub_loopdeclaration_tab(List_UsedInSubroutine_Var,fortranout);
      if ( mark == 1 ) fprintf(fortranout,"!!! 333333333333333 \n");
      writesub_loopdeclaration_scalar(List_UsedInSubroutine_Var,paramout);
      if ( mark == 1 ) fprintf(fortranout,"!!! 444444444444444 \n");
      /* now we should write the function declaration                         */
      /*    case if it is the                                                 */
      WriteFunctionDeclaration(1);
      if ( mark == 1 ) fprintf(fortranout,"!!! 555555555555555 \n");

//      if ( SubInList_ContainsSubroutine() == 0 ) WriteSubroutineDeclaration(1);
  
      if ( mark == 1 ) fprintf(fortranout,"!!! 666666666666666 \n");
      if ( todebug == 1 ) printf("Out of writeheadnewsub_0\n");
   }
   else if ( firstpass == 0 )
   {
      AddUseAgrifUtil_0(fortranout);
      WriteUsemoduleDeclaration(subroutinename);
      WriteIncludeDeclaration();
      if ( ImplicitNoneInSubroutine() == 1 ) fprintf(fortranout,
                                                       "      IMPLICIT NONE\n");
      if ( mark == 1 ) fprintf(fortranout,"!!! aaaaaaaaaaaaaaa \n");
      WriteLocalParamDeclaration();
      if ( mark == 1 ) fprintf(fortranout,"!!! bbbbbbbbbbbbbbb \n");
      if ( functiondeclarationisdone == 0 ) WriteFunctionDeclaration(1);
      if ( mark == 1 ) fprintf(fortranout,"!!! bbbbbbccccccccc \n");      
      WriteArgumentDeclaration_beforecall();
/*      writesub_loopdeclaration_scalar(List_SubroutineArgument_Var,fortranout);
      writesub_loopdeclaration_tab(List_SubroutineArgument_Var,fortranout);*/
      if ( mark == 1 ) fprintf(fortranout,"!!! ccccccccccccccc \n");
      if ( mark == 1 ) fprintf(fortranout,"!!! ddddddddddddddd \n");
//      WriteSubroutineDeclaration(1);
      if ( mark == 1 ) fprintf(fortranout,"!!! eeeeeeeeeeeeeee \n");
   }
}
コード例 #14
0
ファイル: UtilFortran.c プロジェクト: ducousso/CROCO-NH
void Write_Closing_Module(int forend)
{
    listvar *parcours;
    listnom *parcours_nom;
    listnom *parcours_nomprec;
    variable *v;
    int out = 0;
    int headtypewritten = 0;
    char ligne[LONG_M];
    int changeval;

    // Write Global Parameter Declaration
    parcours = List_GlobalParameter_Var;
    while( parcours )
    {
        if ( !strcasecmp(parcours->var->v_modulename, curmodulename) )
        {
            WriteVarDeclaration(parcours->var, module_declar, 0, 1);
        }
        parcours = parcours -> suiv;
    }

    // Write Global Type declaration
    parcours = List_Global_Var;
    while( parcours )
    {
        v = parcours->var;
        if ( !strcasecmp(v->v_modulename, curmodulename) &&
             !strcasecmp(v->v_typevar, "type") )
        {
            if ( headtypewritten == 0 )
            {
                fprintf(fortran_out, "\n      type Agrif_%s\n", curmodulename);
                headtypewritten = 1;
            }
            changeval = 0;
            if ( v->v_allocatable )
            {
                changeval = 1;
                v->v_allocatable = 0;
                v->v_pointerdeclare = 1;
            }
            WriteVarDeclaration(v, fortran_out, 0, 0);
            if ( changeval )
            {
                v->v_allocatable = 1;
                v->v_pointerdeclare = 0;
            }
            out = 1;
        }
        parcours = parcours -> suiv;
    }
    if (out == 1)
    {
        fprintf(fortran_out, "      end type Agrif_%s\n", curmodulename);
        sprintf(ligne, "type(Agrif_%s), dimension(:), allocatable :: Agrif_%s_var",curmodulename, curmodulename);
        tofich(fortran_out,ligne,1);
        fprintf(fortran_out, "      public :: Agrif_%s\n", curmodulename);
        fprintf(fortran_out, "      public :: Agrif_%s_var\n", curmodulename);
    }

    // Write NotGridDepend declaration
    parcours = List_NotGridDepend_Var;
    while( parcours )
    {
        if ( !strcasecmp(parcours->var->v_modulename,curmodulename) )
        {
            WriteVarDeclaration(parcours->var, fortran_out, 0, 1);
        }
        parcours = parcours -> suiv;
    }

    // Write Alloc_agrif_'modulename' subroutine
    parcours_nomprec = (listnom*) NULL;
    parcours_nom = List_NameOfModule;
    out = 0 ;
    while ( parcours_nom && out == 0 )
    {
        if ( !strcasecmp(curmodulename,parcours_nom->o_nom) ) out = 1;
        else parcours_nom = parcours_nom -> suiv;
    }
    if ( ! out )
    {
        printf("#\n# Write_Closing_Module : OUT == 0   *** /!\\ ***\n");
        printf("# FIXME: POSSIBLE BUG in CONV !!!\n#\n");
    }
    if ( out )
    {
        if ( parcours_nom->o_val == 1 )
        {
            fprintf(fortran_out,"\n      public :: Alloc_agrif_%s\n",curmodulename);
        }
        if ( (forend == 0) || (parcours_nom->o_val == 1) )
        {
           fprintf(fortran_out,"\n      contains\n");
        }
        if ( parcours_nom->o_val == 1 )
        {
            fprintf(fortran_out, "      subroutine Alloc_agrif_%s(Agrif_Gr)\n", curmodulename);
            fprintf(fortran_out, "          use Agrif_Util\n");
            fprintf(fortran_out, "          type(Agrif_grid), pointer :: Agrif_Gr\n");
            fprintf(fortran_out, "          integer :: i\n");
            fprintf(fortran_out, "\n#include \"alloc_agrif_%s.h\"\n", curmodulename);
            fprintf(fortran_out, "      end subroutine Alloc_agrif_%s\n", curmodulename);
            Add_Subroutine_For_Alloc(curmodulename);
        }
        else
        {
            parcours_nom = List_Subroutine_For_Alloc;
            out = 0;
            while ( parcours_nom && out == 0 )
            {
                if ( !strcasecmp(parcours_nom->o_nom, curmodulename) ) out = 1;
                else
                {
                    parcours_nomprec = parcours_nom;
                    parcours_nom = parcours_nom->suiv;
                }
            }
            if ( out )
            {
                if ( parcours_nom == List_Subroutine_For_Alloc)
                {
                    List_Subroutine_For_Alloc = List_Subroutine_For_Alloc->suiv;
                }
                else
                {
                    parcours_nomprec->suiv = parcours_nom->suiv;
                    parcours_nom = parcours_nomprec->suiv ;
                }
            }
        }
    }
}