Ignore:
Timestamp:
Mar 15, 2019 11:15:38 AM (5 years ago)
Author:
forkel
Message:

Modifications for OpenMP version by Klaus Ketelsen

Location:
palm/trunk/UTIL/chemistry/gasphase_preproc/kpp4palm/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/UTIL/chemistry/gasphase_preproc/kpp4palm/src/create_kpp_module.C

    r3789 r3797  
    1717//-----------------
    1818//$Id: create_kpp_module.C 3453 2018-10-30 13:21:51Z forkel $
     19// OpenMP version    (15.03.2019, ketelsen)
     20//
    1921// Added vector switch Kacc,Krej,IERRV, Commented add_line for istatf,    (05.03.2019, forkel)
    2022//      added ,pe after ierr_u,         
     
    233235
    234236   mz_kpp.add_line(" ");
     237
     238// Declare variables THREADPRIVATE for OpenMP version
     239
     240   mz_kpp.add_line("  ! OpenMP directives generated by kp4 ");
     241   mz_kpp.add_line(" ");
     242   mz_kpp.add_line("  !$OMP THREADPRIVATE (vl,vl_glo,is,ie,data_loaded)");
     243   mz_kpp.add_line("  !$OMP THREADPRIVATE (c,var,fix,rconst,time,temp,stepmin,cfactor)");
     244   mz_kpp.add_line("  !$OMP THREADPRIVATE (qvap,fakt,cs_mech,a,icntrl,rcntrl)");
     245   mz_kpp.add_line(" ");
     246   if(kpp_switches.is_vector()) {
     247      mz_kpp.add_line("  ! Vector mode Only ");
     248          mz_kpp.add_line(" ");
     249          mz_kpp.add_line("  !$OMP THREADPRIVATE (kacc,krej,ierrv)");
     250          mz_kpp.add_line("  !$OMP THREADPRIVATE (kpoints,kpoints_SAVE,index_org,done_check,index_step,cell_done)");
     251          mz_kpp.add_line("  !$OMP THREADPRIVATE (f_done,kacc_done,krej_done,ierr_done,compress_done)");
     252          mz_kpp.add_line(" ");
     253   }
    235254
    236255
     
    444463   }
    445464   mz_kpp.add_line("  logical                     :: data_loaded = .false.             ");
     465   if(kpp_switches.is_vector()) {
     466          mz_kpp.add_line("  REAL(dp),POINTER,DIMENSION(:,:),CONTIGUOUS    :: var           ");
     467   } else {
     468      mz_kpp.add_line("  REAL(dp),POINTER,DIMENSION(:),CONTIGUOUS    :: var             ");
     469   }
    446470   in.close();
    447471
     
    547571   kppi.add_line("  if (present (rcntrl_i) )  rcntrl  = rcntrl_i                      ");
    548572   kppi.add_line("                                                                    ");
     573   if(kpp_switches.is_vector()) {
     574      kppi.add_line("  var => c(:,1:nvar)                                                  ");
     575   } else {
     576      kppi.add_line("  var => c(1:nvar)                                                  ");
     577   }
     578   kppi.add_line("                                                                    ");
    549579   kppi.add_line("  vl_glo = size(tempi,1)                                            ");
    550580   kppi.add_line("                                                                    ");
  • palm/trunk/UTIL/chemistry/gasphase_preproc/kpp4palm/src/fortran_file.C

    r3789 r3797  
    1818//-----------------
    1919//$Id:
     20// OpenMP version    (15.03.2019, ketelsen)
    2021//
    21 // removal of unnecessary variables (Ntotal, TSTART)                        (08.03.2019 forkel)
     22// removal of unnecessary variables (Ntotal, TSTART)   (08.03.2019 forkel)
    2223//
    2324// Added vector switch and creation of dimension statement (rev. 3260, 18.09.2018, ketelsen)
     
    333334      lo_line.insert(0,"!DELETE ");
    334335    }
     336//  Delete KPP-generated EQUIVALENCE line (var is POINTER now)
     337    if(ip->get_token(0) == "EQUIVALENCE"  && ip->get_token_size() >= 1) {
     338      lo_line.insert(0,"!DELETE ");
     339    }
    335340
    336341//  Remove  REAL(kind=dp):: sun
     
    429434    }
    430435
    431 
    432 
    433436//  Make ind_ variables public
     437
    434438    if(ip->get_token(3).substr(0,4) == "ind_") {
    435439      global_substitute (lo_line,"PARAMETER","PARAMETER, PUBLIC");
     
    670674    ip->global_substitute(", - ",", -");
    671675
     676//  Replace Roundoff = WLAMCH('E') since WLAMCH does not work everywhere
     677       ip->global_substitute("Roundoff = WLAMCH('E')","roundoff = epsilon(one)");
     678
    672679// Now do some cosmetics to adapt the KPP generated output a bit o the looks of PALM,
    673680// i.e. add some blanks, convert all to lowercase except Fortran language elements, etc.
    674 //  Replace Roundoff = WLAMCH('E') by Roundoff = epsilon(one)
    675        ip->global_substitute("Roundoff = WLAMCH('E')","roundoff = epsilon(one)");
    676681       lo_line = ip->get_line();
    677682       if(lo_line.find("'",0) == string::npos)  {     // No substitution in line with strings
     
    706711         global_substitute(lo_line,"E+ ","E+");
    707712         global_substitute(lo_line,"E- ","E-");
     713//   Set all characters to lowercase
    708714         ip->global_subtolower(lo_line);
     715//   Restore OMP directives: The next 2 lines are not only cosmetics!
     716         global_substitute(lo_line,"!$omp","!$OMP");
     717         global_substitute(lo_line,"threadprivate","THREADPRIVATE");
     718
    709719         global_substitute(lo_line,"allocated","ALLOCATED");
    710720         global_substitute(lo_line,"allocatable","ALLOCATABLE");
     
    714724         global_substitute(lo_line,"character","CHARACTER");
    715725         global_substitute(lo_line,"contains","CONTAINS");
     726         global_substitute(lo_line,"contiguous","CONTIGUOUS");
    716727         global_substitute(lo_line,"deallocate","DEALLOCATE");
    717728         global_substitute(lo_line,"allocate","ALLOCATE");
     
    728739         global_substitute(lo_line,"tEND","tend");
    729740         global_substitute(lo_line,"#ENDIF","#endif");
    730          global_substitute(lo_line,"equivalence","EQUIVALENCE");
    731741         global_substitute(lo_line,"function","FUNCTION");
    732742         global_substitute(lo_line,"if(","IF (");
     
    743753         global_substitute(lo_line,"optional","OPTIONAL");
    744754         global_substitute(lo_line,"parameter","PARAMETER");
     755         global_substitute(lo_line,"pointer","POINTER");
    745756         global_substitute(lo_line,"present","PRESENT");
    746757         global_substitute(lo_line,"private","PRIVATE");
     
    752763         global_substitute(lo_line,"save","SAVE");
    753764         global_substitute(lo_line,"subroutine","SUBROUTINE");
     765         global_substitute(lo_line,"target","TARGET");
    754766         global_substitute(lo_line,"then","THEN");
    755767         global_substitute(lo_line,"where","WHERE");
     
    761773         global_substitute(lo_line,"(inout)","(INOUT)");
    762774         global_substitute(lo_line,"\t","      ");
     775
     776         // Skalar Version
     777         global_substitute(lo_line,"  REAL(kind=dp):: var(nvar)","! REAL(kind=dp):: var(nvar)  var is now POINTER");
     778         global_substitute(lo_line,"REAL(kind=dp):: c(nspec)","REAL(kind=dp), TARGET    :: c(nspec)");
     779         // Vektor Version
     780         global_substitute(lo_line,"  REAL(kind=dp):: var (vl_dim, nvar)","! REAL(kind=dp):: var (vl_dim, nvar)  var is now POINTER");
     781         global_substitute(lo_line,"REAL(kind=dp):: c (vl_dim, nspec)","REAL(kind=dp), TARGET    :: c (vl_dim, nspec)");
     782
    763783//       cout << "HIER1 " << lo_line <<endl;
    764784       }
Note: See TracChangeset for help on using the changeset viewer.