subroutine wpunchnc(ncid,ntim,ntimr,tim,dt1,time,dt) c c Write results to the *.nc file. c include 'netcdf.inc' include 'itg.par' include 'itg.cmn' include 'itg_ri.cmn' c subroutine arguments integer ncid ! netCDF id number of the opened file integer ntim ! on entry, the index of last time point previously used. ! on exit, the index of the last time point now used. integer ntimr ! the same as for ntim, but for a copy of phi(t) at ! one point with potentially higher time resolution ! for frequency calculation. c output subroutine arguments: real tim ! final time when dt is the same for all ky's. real dt1 ! time step when dt is the same for all ky's. real time(mz) ! final time for various ky's. real dt(mz) ! time step for various ky's. c local variables: character filename*80 ! name of netcdf file character yorn*1 integer i,k,id,l,m,n,n1,nt1,nt2,ntf1,ntf2 real xxx integer ri c netCDF variables integer status integer field_dim(4) ! dimensions of the complex field variables integer ion_dim(5) ! ion variables also have species # dimension integer e_dim(4) ! bounce-avgd electron dimensions integer av_dim(3) ! dimensions for flux-surface avgd complex integer flux_dim(2) ! time and nd integer mgamx_dim(3) ! md,nd,time integer wtif_dim(3) ! time,md,nd integer cx_dim(2),cy_dim(2),cz_dim(2),drt_dim(2) integer phi00_dim(3) ! ri,time,nd for flux-surface-avg time integer utim_dim(4) integer fluximn_dim(4) integer lmn_dim(3) integer mn_dim(2) integer ld_dim,md_dim,nd_dim,nspec_dim,kdpass_dim integer time_dim,nd4_dim,md4_dim,id_dim,timef_dim integer ri_dim ! extra dimension for complex vars, 1=real 2=im integer ld_id,ldb_id,kd_id,nmin_id,nmax_id ! variable tags integer nd_id,lin_id,kdpass_id integer nstp_id,ne_id,nfreq_id,ntotal_id,md_id integer nspecies_id,ikx_id,iperiod_id integer nparmom_id,nperpmom_id,nemom_id integer iodd_id,iflr_id,iphi00_id,ifilter_id integer iexp_id,igradon_id,mmin_id,mmax_id integer tim_id,shr_id,qsf_id,epsn_id,eps_id,epse_id integer nueeff_id,alpha_id,etai_id,nuii_id,rmu1_id integer tiovte_id,vy_id,vz_id,rmime_id,etae_id integer dt0_id,dt1_id,x0_id,y0_id,z0_id,xp_id integer density_id,potential_id,u_par_id,t_par_id,t_perp_id integer q_perp_id,q_par_id integer e_density_id,e_p_id,e_r_id,e_t_id,phi_ba_id integer phi_bk_id,e_denk_id,phiav_old_id integer timo_id,wpfx_id,fluxi_id,fluxe_id,qfluxe_id integer gamx_id,mgamx_id,wenx_id,pcerr_id integer wtif_id,wkif_id,wpif_id,psp_id,wenrk_id integer dketa_id,dkpar_id,dktor_id,dktdp_id,wkups_id integer dktot_id,cx_id,cy_id,cz_id,czc_id,czcn_id integer czn_id,cznn_id,ct_id,ninterv_id integer phi00_id,den00_id,upar00_id,tpar00_id,tperp00_id integer drt_id,phirms_id,wakx_id,waky_id,wxsp_id integer utor_id,upol_id,grtmx_id,utim_id,timf_id integer avgflag_id,date_id,note_id integer rmass_id,charge_id,n_I_id,Ln_id,eta_id integer eta_par_id,tau_id,phisq_id,fluximn_id integer qfluximn_id,fluxemn_id,qfluxemn_id integer icrit_id,ntimf_id,time_id,dt_id,rkperp2_id integer rdiff_id,chi_int_id c small arrays for simple assign commands real potential_s(2,ld,md,nd),density_s(2,ld,md,nd,nspecies) real u_par_s(2,ld,md,nd,nspecies),t_par_s(2,ld,md,nd,nspecies) real t_perp_s(2,ld,md,nd,nspecies),q_par_s(2,ld,md,nd,nspecies) real q_perp_s(2,ld,md,nd,nspecies) real e_density_s(2,kdpass,md,nd),e_p_s(2,kdpass,md,nd) real e_r_s(2,kdpass,md,nd),e_t_s(2,kdpass,md,nd) real phi_ba_s(2,kdpass,md,nd),phiav_old_s(2,md,nd) real phi_bk_s(2,ld,md,nd),e_denk_s(2,ld,md,nd) real wpfx_s(ntim+1:ntim+ne,nspecies) real fluxi_s(ntim+1:ntim+ne,nspecies) real mgamx_s(md,nd,ntim+1:ntim+ne) real wtif_s(ntim+1:ntim+ne,md,nd) real wkif_s(ntim+1:ntim+ne,md,nd) real wpif_s(ntim+1:ntim+ne,md,nd) real psp_s(ntim+1:ntim+ne,md,nd) real wenrk_s(ntim+1:ntim+ne,md,nd) real dketa_s(ntim+1:ntim+ne,md,nd) real dkpar_s(ntim+1:ntim+ne,md,nd) real dktor_s(ntim+1:ntim+ne,md,nd) real dktdp_s(ntim+1:ntim+ne,md,nd) real wkups_s(ntim+1:ntim+ne,md,nd) real dktot_s(ntim+1:ntim+ne,md,nd) real cx_s(ntim+1:ntim+ne,4*nd) real cy_s(ntim+1:ntim+ne,4*md) real cz_s(ntim+1:ntim+ne,ld),czc_s(ntim+1:ntim+ne,ld) real czcn_s(ntim+1:ntim+ne,ld),czn_s(ntim+1:ntim+ne,ld) real cznn_s(ntim+1:ntim+ne,ld) real phi00_s(2,ntim+1:ntim+ne,nd) real den00_s(2,ntim+1:ntim+ne,nd) real upar00_s(2,ntim+1:ntim+ne,nd) real tpar00_s(2,ntim+1:ntim+ne,nd) real tperp00_s(2,ntim+1:ntim+ne,nd) real tpar00_s(2,ntim+1:ntim+ne,nd) real drt_s(14,ntim+1:ntim+ne) real grtmx_s(ntim+1:ntim+ne,md,nd) real utim_s(2,ntimr+1:ntimr+ntotal,md,nd) real phisq_s(ntim+1:ntim+ne,md,nd) real fluximn_s(ntim+1:ntim+ne,md,nd,nspecies) real qfluximn_s(ntim+1:ntim+ne,md,nd,nspecies) real fluxemn_s(ntim+1:ntim+ne,md,nd) real qfluxemn_s(ntim+1:ntim+ne,md,nd) real rkperp2_s(ld,md,nd) real rdiff_s(md,nd) c setup real-imaginary arrays for some complex variables c (no complex type in netCDF) real phi00_ri(2,nez,nz) equivalence (phi00,phi00_ri) real den00_ri(2,nez,nz) equivalence (den00,den00_ri) real upar00_ri(2,nez,nz) equivalence (upar00,upar00_ri) real tpar00_ri(2,nez,nz) equivalence (tpar00,tpar00_ri) real tperp00_ri(2,nez,nz) equivalence (tperp00,tperp00_ri) c defaults values for backwards compatibility: xxx=0.0 tim=time(md) dt1=dt(md) nt1=ntim+1 nt2=ntim+ne ntim=ntim+ne ntf1=ntimr+1 ntf2=ntimr+ntotal ntimr=ntimr+ntotal PRINT *, 'netCDF version ',NF_INQ_LIBVERS() c create netCDF file c 5/98 now done by calling routine c filename=runname(1:lrunname)//'.nc' c c 10 STATUS = NF_CREATE(filename, 0, NCID) ! overwrites old c IF (STATUS .NE. NF_NOERR) then c PRINT *, NF_STRERROR(STATUS) c print *, ' ' c print *, 'retry? (y/n)' c read *, yorn c if (yorn.eq.'n') then c stop c else c goto 10 c endif c endif c create dimensions status=nf_def_dim(ncid,'ld',ld,ld_dim) status=nf_def_dim(ncid,'md',md,md_dim) status=nf_def_dim(ncid,'nd',nd,nd_dim) status=nf_def_dim(ncid,'nspecies',nspecies,nspec_dim) status=nf_def_dim(ncid,'ri',2,ri_dim) status=nf_def_dim(ncid,'time',ne,time_dim) status=nf_def_dim(ncid,'timef',ntotal,timef_dim) ! fast timescale status=nf_def_dim(ncid,'nd4',4*nd,nd4_dim) status=nf_def_dim(ncid,'md4',4*md,md4_dim) status=nf_def_dim(ncid,'id',14,id_dim) ! drive term dim status=nf_def_dim(ncid,'char30',30,char30_dim) status=nf_def_dim(ncid,'char80',80,char80_dim) ! set up bounce-avgd electrons only if they exist ! (avoids zero size dimension and saves disk space) if (epse.gt.0.0) then status=nf_def_dim(ncid,'kdpass',kdpass,kdpass_dim) endif field_dim(1)=ri_dim ! dimensions for phi, apar etc. field_dim(2)=ld_dim field_dim(3)=md_dim field_dim(4)=nd_dim ion_dim(1)=ri_dim ! dimensions for ion moments ion_dim(2)=ld_dim ion_dim(3)=md_dim ion_dim(4)=nd_dim ion_dim(5)=nspec_dim if (epse.gt.0.0) then e_dim(1)=ri_dim ! dimensions for bounce-avgd electron moments e_dim(2)=kdpass_dim e_dim(3)=md_dim e_dim(4)=nd_dim endif av_dim(1)=ri_dim ! dimensions for flux-surface avgd complex av_dim(2)=md_dim av_dim(3)=nd_dim flux_dim(1)=time_dim flux_dim(2)=nspec_dim mgamx_dim(1)=md_dim mgamx_dim(2)=nd_dim mgamx_dim(3)=time_dim wtif_dim(1)=time_dim wtif_dim(2)=md_dim wtif_dim(3)=nd_dim cx_dim(1)=time_dim cx_dim(2)=nd4_dim cy_dim(1)=time_dim cy_dim(2)=md4_dim cz_dim(1)=time_dim cz_dim(2)=ld_dim phi00_dim(1)=ri_dim phi00_dim(2)=time_dim phi00_dim(3)=nd_dim drt_dim(1)=id_dim drt_dim(2)=time_dim utim_dim(1)=ri_dim utim_dim(2)=timef_dim utim_dim(3)=md_dim utim_dim(4)=nd_dim fluximn_dim(1)=time_dim fluximn_dim(2)=md_dim fluximn_dim(3)=nd_dim fluximn_dim(4)=nspec_dim lmn_dim(1)=ld_dim lmn_dim(2)=md_dim lmn_dim(3)=nd_dim mn_dim(1)=md_dim mn_dim(2)=nd_dim c define variables status=nf_def_var(ncid,'ld',nf_int,0,0,ld_id) status=nf_def_var(ncid,'ldb',nf_int,0,0,ldb_id) status=nf_def_var(ncid,'kd',nf_int,0,0,kd_id) status=nf_def_var(ncid,'nmin',nf_int,0,0,nmin_id) status=nf_def_var(ncid,'nmax',nf_int,0,0,nmax_id) status=nf_def_var(ncid,'nd',nf_int,0,0,nd_id) status=nf_def_var(ncid,'lin',nf_int,0,0,lin_id) status=nf_def_var(ncid,'kdpass',nf_int,0,0,kdpass_id) status=nf_def_var(ncid,'nstp',nf_int,0,0,nstp_id) status=nf_def_var(ncid,'ne',nf_int,0,0,ne_id) status=nf_def_var(ncid,'nfreq',nf_int,0,0,nfreq_id) status=nf_def_var(ncid,'ntotal',nf_int,0,0,ntotal_id) status=nf_def_var(ncid,'md',nf_int,0,0,md_id) status=nf_def_var(ncid,'nspecies',nf_int,0,0,nspecies_id) status=nf_def_var(ncid,'ikx',nf_int,0,0,ikx_id) status=nf_def_var(ncid,'iperiod',nf_int,0,0,iperiod_id) status=nf_def_var(ncid,'nparmom',nf_int,0,0,nparmom_id) status=nf_def_var(ncid,'nperpmom',nf_int,0,0,nperpmom_id) status=nf_def_var(ncid,'nemom',nf_int,0,0,nemom_id) status=nf_def_var(ncid,'iodd',nf_int,0,0,iodd_id) status=nf_def_var(ncid,'iflr',nf_int,0,0,iflr_id) status=nf_def_var(ncid,'iphi00',nf_int,0,0,iphi00_id) status=nf_def_var(ncid,'ifilter',nf_int,0,0,ifilter_id) status=nf_def_var(ncid,'iexp',nf_int,0,0,iexp_id) status=nf_def_var(ncid,'igradon',nf_int,0,0,igradon_id) status=nf_def_var(ncid,'mmin',nf_int,1,nd_dim,mmin_id) status=nf_def_var(ncid,'mmax',nf_int,1,nd_dim,mmax_id) status=nf_def_var(ncid,'tim',nf_double,0,0,tim_id) status=nf_def_var(ncid,'shr',nf_double,0,0,shr_id) status=nf_def_var(ncid,'qsf',nf_double,0,0,qsf_id) status=nf_def_var(ncid,'epsn',nf_double,0,0,epsn_id) status=nf_def_var(ncid,'eps',nf_double,0,0,eps_id) status=nf_def_var(ncid,'epse',nf_double,0,0,epse_id) status=nf_def_var(ncid,'nueeff',nf_double,0,0,nueeff_id) status=nf_def_var(ncid,'alpha',nf_double,0,0,alpha_id) status=nf_def_var(ncid,'etai',nf_double,0,0,etai_id) status=nf_def_var(ncid,'nuii',nf_double,0,0,nuii_id) status=nf_def_var(ncid,'rmu1',nf_double,0,0,rmu1_id) status=nf_def_var(ncid,'tiovte',nf_double,0,0,tiovte_id) status=nf_def_var(ncid,'vy',nf_double,0,0,vy_id) status=nf_def_var(ncid,'vz',nf_double,0,0,vz_id) status=nf_def_var(ncid,'rmime',nf_double,0,0,rmime_id) status=nf_def_var(ncid,'etae',nf_double,0,0,etae_id) status=nf_def_var(ncid,'dt0',nf_double,0,0,dt0_id) status=nf_def_var(ncid,'dt1',nf_double,0,0,dt1_id) status=nf_def_var(ncid,'x0',nf_double,0,0,x0_id) status=nf_def_var(ncid,'y0',nf_double,0,0,y0_id) status=nf_def_var(ncid,'z0',nf_double,0,0,z0_id) status=nf_def_var(ncid,'xp',nf_double,0,0,xp_id) status=nf_def_var(ncid,'potential',nf_double,4,field_dim, * potential_id) status=nf_def_var(ncid,'density',nf_double,5,ion_dim,density_id) status=nf_def_var(ncid,'u_par',nf_double,5,ion_dim,u_par_id) status=nf_def_var(ncid,'t_par',nf_double,5,ion_dim,t_par_id) status=nf_def_var(ncid,'t_perp',nf_double,5,ion_dim,t_perp_id) status=nf_def_var(ncid,'q_par',nf_double,5,ion_dim,q_par_id) status=nf_def_var(ncid,'q_perp',nf_double,5,ion_dim,q_perp_id) if (epse.gt.0.0) then status=nf_def_var(ncid,'e_density',nf_double,4,e_dim,e_density_id) status=nf_def_var(ncid,'e_p',nf_double,4,e_dim,e_p_id) status=nf_def_var(ncid,'e_r',nf_double,4,e_dim,e_r_id) status=nf_def_var(ncid,'e_t',nf_double,4,e_dim,e_t_id) status=nf_def_var(ncid,'phi_ba',nf_double,4,e_dim,phi_ba_id) status=nf_def_var(ncid,'phi_bk',nf_double,4,field_dim,phi_bk_id) status=nf_def_var(ncid,'e_denk',nf_double,4,field_dim,e_denk_id) endif status=nf_def_var(ncid,'phiav_old',nf_double,3,av_dim,phiav_old_id) status=nf_def_var(ncid,'timo',nf_double,1,time_dim,timo_id) status=nf_def_var(ncid,'wpfx',nf_double,2,flux_dim,wpfx_id) status=nf_def_var(ncid,'fluxi',nf_double,2,flux_dim,fluxi_id) status=nf_def_var(ncid,'fluxe',nf_double,1,time_dim,fluxe_id) status=nf_def_var(ncid,'qfluxe',nf_double,1,time_dim,qfluxe_id) status=nf_def_var(ncid,'gamx',nf_double,1,time_dim,gamx_id) status=nf_def_var(ncid,'mgamx',nf_double,3,mgamx_dim,mgamx_id) status=nf_def_var(ncid,'wenx',nf_double,1,time_dim,wenx_id) status=nf_def_var(ncid,'pcerr',nf_double,1,time_dim,pcerr_id) status=nf_def_var(ncid,'wtif',nf_double,3,wtif_dim,wtif_id) status=nf_def_var(ncid,'wkif',nf_double,3,wtif_dim,wkif_id) status=nf_def_var(ncid,'wpif',nf_double,3,wtif_dim,wpif_id) status=nf_def_var(ncid,'psp',nf_double,3,wtif_dim,psp_id) status=nf_def_var(ncid,'wenrk',nf_double,3,wtif_dim,wenrk_id) status=nf_def_var(ncid,'dketa',nf_double,3,wtif_dim,dketa_id) status=nf_def_var(ncid,'dkpar',nf_double,3,wtif_dim,dkpar_id) status=nf_def_var(ncid,'dktor',nf_double,3,wtif_dim,dktor_id) status=nf_def_var(ncid,'dktdp',nf_double,3,wtif_dim,dktdp_id) status=nf_def_var(ncid,'wkups',nf_double,3,wtif_dim,wkups_id) status=nf_def_var(ncid,'dktot',nf_double,3,wtif_dim,dktot_id) status=nf_def_var(ncid,'cx',nf_double,2,cx_dim,cx_id) status=nf_def_var(ncid,'cy',nf_double,2,cy_dim,cy_id) status=nf_def_var(ncid,'cz',nf_double,2,cz_dim,cz_id) status=nf_def_var(ncid,'czc',nf_double,2,cz_dim,czc_id) status=nf_def_var(ncid,'czcn',nf_double,2,cz_dim,czcn_id) status=nf_def_var(ncid,'czn',nf_double,2,cz_dim,czn_id) status=nf_def_var(ncid,'cznn',nf_double,2,cz_dim,cznn_id) status=nf_def_var(ncid,'ct',nf_double,1,time_dim,ct_id) status=nf_def_var(ncid,'ninterv',nf_int,0,0,ninterv_id) status=nf_def_var(ncid,'phi00',nf_double,3,phi00_dim,phi00_id) status=nf_def_var(ncid,'den00',nf_double,3,phi00_dim,den00_id) status=nf_def_var(ncid,'upar00',nf_double,3,phi00_dim,upar00_id) status=nf_def_var(ncid,'tpar00',nf_double,3,phi00_dim,tpar00_id) status=nf_def_var(ncid,'tperp00',nf_double,3,phi00_dim,tperp00_id) status=nf_def_var(ncid,'drt',nf_double,2,drt_dim,drt_id) status=nf_def_var(ncid,'phirms',nf_double,1,time_dim,phirms_id) status=nf_def_var(ncid,'wakx',nf_double,1,time_dim,wakx_id) status=nf_def_var(ncid,'waky',nf_double,1,time_dim,waky_id) status=nf_def_var(ncid,'wxsp',nf_double,1,time_dim,wxsp_id) status=nf_def_var(ncid,'utor',nf_double,1,time_dim,utor_id) status=nf_def_var(ncid,'upol',nf_double,1,time_dim,upol_id) status=nf_def_var(ncid,'grtmx',nf_double,3,wtif_dim,grtmx_id) status=nf_def_var(ncid,'utim',nf_double,4,utim_dim,utim_id) status=nf_def_var(ncid,'timf',nf_double,1,timef_dim,timf_id) status=nf_def_var(ncid,'avgflag',nf_double,0,0,avgflag_id) status=nf_def_var(ncid,'date',nf_char,1,char30_dim,date_id) status=nf_def_var(ncid,'note',nf_char,1,char80_dim,note_id) status=nf_def_var(ncid,'rmass',nf_double,1,nspec_dim,rmass_id) status=nf_def_var(ncid,'charge',nf_double,1,nspec_dim,charge_id) status=nf_def_var(ncid,'n_I',nf_double,1,nspec_dim,n_I_id) status=nf_def_var(ncid,'Ln',nf_double,1,nspec_dim,Ln_id) status=nf_def_var(ncid,'eta',nf_double,1,nspec_dim,eta_id) status=nf_def_var(ncid,'eta_par',nf_double,1,nspec_dim,eta_par_id) status=nf_def_var(ncid,'tau',nf_double,1,nspec_dim,tau_id) status=nf_def_var(ncid,'phisq',nf_double,3,wtif_dim,phisq_id) status=nf_def_var(ncid,'fluximn',nf_double,4,fluximn_dim,fluximn_id) status=nf_def_var(ncid,'qfluximn',nf_double,4,fluximn_dim,qfluximn_id) status=nf_def_var(ncid,'fluxemn',nf_double,3,wtif_dim,fluxemn_id) status=nf_def_var(ncid,'qfluxemn',nf_double,3,wtif_dim,qfluxemn_id) status=nf_def_var(ncid,'icrit',nf_int,0,0,icrit_id) status=nf_def_var(ncid,'ntimf',nf_int,0,0,ntimf_id) status=nf_def_var(ncid,'time',nf_double,1,md_dim,time_id) status=nf_def_var(ncid,'dt',nf_double,1,md_dim,dt_id) status=nf_def_var(ncid,'rkperp2',nf_double,3,lmn_dim,rkperp2_id) status=nf_def_var(ncid,'rdiff',nf_double,2,mn_dim,rdiff_id) status=nf_def_var(ncid,'chi_int',nf_double,0,0,chi_int,chi_int_id) c add attributes status=NF_PUT_ATT_TEXT(NCID, NF_GLOBAL, 'title', 17, * 'itgc restart data') status=nf_put_att_text(ncid,potential_id,'units',17, * 'T_i0/e rho_i/L_ne') status=nf_put_att_text(ncid,potential_id,'long_name',23, * 'Electrostatic Potential') status=nf_put_att_text(ncid,potential_id,'idl_name',5, * '!7U!6') status=nf_put_att_text(ncid,density_id,'units',14, * 'n_0 rho_i/L_ne') status=nf_put_att_text(ncid,density_id,'long_name',11, * 'Ion Density') status=nf_put_att_text(ncid,density_id,'idl_name',8, * '!6n!Di!N') status=nf_put_att_text(ncid,u_par_id,'units',15, * 'v_ti rho_i/L_ne') status=nf_put_att_text(ncid,u_par_id,'long_name',21, * 'Ion Parallel Velocity') status=nf_put_att_text(ncid,u_par_id,'idl_name',15, * '!6u!D!9#!6!Di!N') status=nf_put_att_text(ncid,t_par_id,'units',15, * 'T_i0 rho_i/L_ne') status=nf_put_att_text(ncid,t_par_id,'long_name',24, * 'Ion Parallel Temperature') status=nf_put_att_text(ncid,t_par_id,'idl_name',15, * '!6T!D!9#!6!Di!N') status=nf_put_att_text(ncid,t_perp_id,'units',15, * 'T_i0 rho_i/L_ne') status=nf_put_att_text(ncid,t_perp_id,'long_name',29, * 'Ion Perpendicular Temperature') status=nf_put_att_text(ncid,t_perp_id,'idl_name',15, * '!6T!D!9x!6!Di!N') status=nf_put_att_text(ncid,q_par_id,'units',25, * 'n_0 m_i v_ti^3 rho_i/L_ne') status=nf_put_att_text(ncid,q_par_id,'long_name',22, * 'Ion Parallel Heat Flow') status=nf_put_att_text(ncid,q_par_id,'idl_name',15, * '!6q!D!9#!6!Di!N') status=nf_put_att_text(ncid,q_perp_id,'units',25, * 'n_0 m_i v_ti^3 rho_i/L_ne') status=nf_put_att_text(ncid,q_perp_id,'long_name',27, * 'Ion Perpendicular Heat Flow') status=nf_put_att_text(ncid,q_perp_id,'idl_name',15, * '!6q!D!9x!6!Di!N') status=nf_put_att_text(ncid,wpfx_id,'long_name',13, * 'Ion Heat Flux') status=nf_put_att_text(ncid,fluxi_id,'long_name',17, * 'Ion Particle Flux') status=nf_put_att_text(ncid,fluxe_id,'long_name',22, * 'Electron Particle Flux') status=nf_put_att_text(ncid,qfluxe_id,'long_name',18, * 'Electron Heat Flux') status=nf_put_att_text(ncid,gamx_id,'long_name',18, * 'Energy Growth Rate') status=nf_put_att_text(ncid,wenx_id,'long_name',12, * 'Total Energy') status=nf_put_att_text(ncid,ct_id,'long_name',29, * 'Time correlation of Potential') status=nf_put_att_text(ncid,phirms_id,'long_name',13, * 'RMS Potential') status=nf_put_att_text(ncid,wakx_id,'long_name',17, * 'Radial Mode Width') status=nf_put_att_text(ncid,waky_id,'long_name',19, * 'Poloidal Mode Width') status=nf_put_att_text(ncid,wxsp_id,'long_name',11, * 'Mode Spread') status=nf_put_att_text(ncid,utor_id,'long_name',13, * 'Toroidal Flow') status=nf_put_att_text(ncid,upol_id,'long_name',13, * 'Poloidal Flow') c write variables status=nf_enddef(ncid) ! out of definition mode c note that this is complicated for the multidimensional c arrays, because their dimensions in the netCDF file c (md, nd etc.) are not the true array dims (mz, nz, etc.), c so do loops must be used rather than simple puts c for ease of later manipulation, assign values to small c versions of the arrays instead (call them xxx_s) c 5/98 PS - this was unnecessary, could've just used indices c on the arrays as in wreadnc (ie potential(1:2,1:ld,1:md,1:nd)) c but it works as is, and isn't slow, so i'll leave it for now do ri=1,2 do m=1,md do n=1,nd phiav_old_s(ri,m,n)=phiav_old_ri(ri,m,n) do l=1,ld potential_s(ri,l,m,n)=potential_ri(ri,l,m,n) phi_bk_s(ri,l,m,n)=phi_bk_ri(ri,l,m,n) e_denk_s(ri,l,m,n)=e_denk_ri(ri,l,m,n) rkperp2_s(l,m,n)=rkperp2(l,m,n) do i=1,nspecies density_s(ri,l,m,n,i)=density_ri(ri,l,m,n,i) u_par_s(ri,l,m,n,i)=u_par_ri(ri,l,m,n,i) t_par_s(ri,l,m,n,i)=t_par_ri(ri,l,m,n,i) t_perp_s(ri,l,m,n,i)=t_perp_ri(ri,l,m,n,i) q_par_s(ri,l,m,n,i)=q_par_ri(ri,l,m,n,i) q_perp_s(ri,l,m,n,i)=q_perp_ri(ri,l,m,n,i) enddo enddo enddo enddo enddo if (epse.gt.0.0) then do ri=1,2 do k=1,kdpass do m=1,md do n=1,nd e_density_s(ri,k,m,n)=e_density_ri(ri,k,m,n) e_p_s(ri,k,m,n)=e_p_ri(ri,k,m,n) e_r_s(ri,k,m,n)=e_r_ri(ri,k,m,n) e_t_s(ri,k,m,n)=e_t_ri(ri,k,m,n) phi_ba_s(ri,k,m,n)=phi_ba_ri(ri,k,m,n) enddo enddo enddo enddo endif do i=nt1,nt2 do n=1,nspecies wpfx_s(i,n)=wpfx(i,n) fluxi_s(i,n)=fluxi(i,n) enddo do n=1,4*nd cx_s(i,n)=cx(i,n) enddo do m=1,4*md cy_s(i,m)=cy(i,m) enddo do l=1,ld cz_s(i,l)=cz(i,l) czc_s(i,l)=czc(i,l) czcn_s(i,l)=czcn(i,l) czn_s(i,l)=czn(i,l) cznn_s(i,l)=cznn(i,l) enddo do id=1,14 drt_s(id,i)=drt(id,i) enddo do n=1,nd do ri=1,2 phi00_s(ri,i,n)=phi00_ri(ri,i,n) den00_s(ri,i,n)=den00_ri(ri,i,n) upar00_s(ri,i,n)=upar00_ri(ri,i,n) tpar00_s(ri,i,n)=tpar00_ri(ri,i,n) tperp00_s(ri,i,n)=tperp00_ri(ri,i,n) enddo do m=1,md mgamx_s(m,n,i)=mgamx(m,n,i) wtif_s(i,m,n)=wtif(i,m,n) wkif_s(i,m,n)=wkif(i,m,n) wpif_s(i,m,n)=wpif(i,m,n) psp_s(i,m,n)=psp(i,m,n) wenrk_s(i,m,n)=wenrk(i,m,n) dketa_s(i,m,n)=dketa(i,m,n) dkpar_s(i,m,n)=dkpar(i,m,n) dktor_s(i,m,n)=dktor(i,m,n) dktdp_s(i,m,n)=dktdp(i,m,n) wkups_s(i,m,n)=wkups(i,m,n) dktot_s(i,m,n)=dktot(i,m,n) grtmx_s(i,m,n)=grtmx(i,m,n) phisq_s(i,m,n)=phisq(i,m,n) fluxemn_s(i,m,n)=fluxemn(i,m,n) qfluxemn_s(i,m,n)=qfluxemn(i,m,n) do l=1,nspecies fluximn_s(i,m,n,l)=fluximn(i,m,n,l) qfluximn_s(i,m,n,l)=qfluximn(i,m,n,l) enddo enddo enddo enddo do ri=1,2 do i=ntf1,ntf2 do m=1,md do n=1,nd utim_s(ri,i,m,n)=utim_ri(ri,i,m,n) enddo enddo enddo enddo status=nf_put_var_int(ncid,ld_id,ld) status=nf_put_var_int(ncid,ldb_id,ldb) status=nf_put_var_int(ncid,kd_id,kd) status=nf_put_var_int(ncid,nmin_id,nmin) status=nf_put_var_int(ncid,nmax_id,nmax) status=nf_put_var_int(ncid,nd_id,nd) status=nf_put_var_int(ncid,lin_id,lin) status=nf_put_var_int(ncid,kdpass_id,kdpass) status=nf_put_var_int(ncid,nstp_id,nstp) status=nf_put_var_int(ncid,ne_id,ne) status=nf_put_var_int(ncid,nfreq_id,nfreq) status=nf_put_var_int(ncid,ntotal_id,ntotal) status=nf_put_var_int(ncid,md_id,md) status=nf_put_var_int(ncid,nspecies_id,nspecies) status=nf_put_var_int(ncid,ikx_id,ikx) status=nf_put_var_int(ncid,iperiod_id,iperiod) status=nf_put_var_int(ncid,nparmom_id,nparmom) status=nf_put_var_int(ncid,nperpmom_id,nperpmom) status=nf_put_var_int(ncid,nemom_id,nemom) status=nf_put_var_int(ncid,iodd_id,iodd) status=nf_put_var_int(ncid,iflr_id,iflr) status=nf_put_var_int(ncid,iphi00_id,iphi00) status=nf_put_var_int(ncid,ifilter_id,ifilter) status=nf_put_var_int(ncid,iexp_id,iexp) status=nf_put_var_int(ncid,igradon_id,igradon) status=nf_put_var_int(ncid,mmin_id,mmin) status=nf_put_var_int(ncid,mmax_id,mmax) status=nf_put_var_double(ncid,tim_id,tim) status=nf_put_var_double(ncid,shr_id,shr) status=nf_put_var_double(ncid,qsf_id,qsf) status=nf_put_var_double(ncid,epsn_id,epsn) status=nf_put_var_double(ncid,eps_id,eps) status=nf_put_var_double(ncid,epse_id,epse) status=nf_put_var_double(ncid,nueeff_id,nueeff) status=nf_put_var_double(ncid,alpha_id,alpha) status=nf_put_var_double(ncid,etai_id,etai) status=nf_put_var_double(ncid,nuii_id,nuii) status=nf_put_var_double(ncid,rmu1_id,rmu1) status=nf_put_var_double(ncid,tiovte_id,tiovte) status=nf_put_var_double(ncid,vy_id,vy) status=nf_put_var_double(ncid,vz_id,vz) status=nf_put_var_double(ncid,rmime_id,rmime) status=nf_put_var_double(ncid,etae_id,etae) status=nf_put_var_double(ncid,dt0_id,dt0) status=nf_put_var_double(ncid,dt1_id,dt1) status=nf_put_var_double(ncid,x0_id,x0) status=nf_put_var_double(ncid,y0_id,y0) status=nf_put_var_double(ncid,z0_id,z0) status=nf_put_var_double(ncid,xp_id,xp) status=nf_put_var_double(ncid,potential_id,potential_s) status=nf_put_var_double(ncid,density_id,density_s) status=nf_put_var_double(ncid,u_par_id,u_par_s) status=nf_put_var_double(ncid,t_par_id,t_par_s) status=nf_put_var_double(ncid,t_perp_id,t_perp_s) status=nf_put_var_double(ncid,q_par_id,q_par_s) status=nf_put_var_double(ncid,q_perp_id,q_perp_s) if (epse.gt.0.0) then status=nf_put_var_double(ncid,e_density_id,e_density_s) status=nf_put_var_double(ncid,e_p_id,e_p_s) status=nf_put_var_double(ncid,e_r_id,e_r_s) status=nf_put_var_double(ncid,e_t_id,e_t_s) status=nf_put_var_double(ncid,phi_ba_id,phi_ba_s) status=nf_put_var_double(ncid,phi_bk_id,phi_bk_s) status=nf_put_var_double(ncid,e_denk_id,e_denk_s) endif status=nf_put_var_double(ncid,phiav_old_id,phiav_old_s) status=nf_put_var_double(ncid,timo_id,timo(nt1)) status=nf_put_var_double(ncid,wpfx_id,wpfx_s) status=nf_put_var_double(ncid,fluxi_id,fluxi_s) status=nf_put_var_double(ncid,fluxe_id,fluxe(nt1)) status=nf_put_var_double(ncid,qfluxe_id,qfluxe(nt1)) status=nf_put_var_double(ncid,gamx_id,gamx(nt1)) status=nf_put_var_double(ncid,mgamx_id,mgamx_s) status=nf_put_var_double(ncid,wenx_id,wenx(nt1)) status=nf_put_var_double(ncid,pcerr_id,pcerr(nt1)) status=nf_put_var_double(ncid,wtif_id,wtif_s) status=nf_put_var_double(ncid,wkif_id,wkif_s) status=nf_put_var_double(ncid,wpif_id,wpif_s) status=nf_put_var_double(ncid,psp_id,psp_s) status=nf_put_var_double(ncid,wenrk_id,wenrk_s) status=nf_put_var_double(ncid,dketa_id,dketa_s) status=nf_put_var_double(ncid,dkpar_id,dkpar_s) status=nf_put_var_double(ncid,dktor_id,dktor_s) status=nf_put_var_double(ncid,dktdp_id,dktdp_s) status=nf_put_var_double(ncid,wkups_id,wkups_s) status=nf_put_var_double(ncid,dktot_id,dktot_s) status=nf_put_var_double(ncid,cx_id,cx_s) status=nf_put_var_double(ncid,cy_id,cy_s) status=nf_put_var_double(ncid,cz_id,cz_s) status=nf_put_var_double(ncid,czc_id,czc_s) status=nf_put_var_double(ncid,czcn_id,czcn_s) status=nf_put_var_double(ncid,czn_id,czn_s) status=nf_put_var_double(ncid,cznn_id,cznn_s) status=nf_put_var_double(ncid,ct_id,ct(nt1)) status=nf_put_var_int(ncid,ninterv_id,ninterv) status=nf_put_var_double(ncid,phi00_id,phi00_s) status=nf_put_var_double(ncid,den00_id,den00_s) status=nf_put_var_double(ncid,upar00_id,upar00_s) status=nf_put_var_double(ncid,tpar00_id,tpar00_s) status=nf_put_var_double(ncid,tperp00_id,tperp00_s) status=nf_put_var_double(ncid,drt_id,drt_s) status=nf_put_var_double(ncid,phirms_id,phirms(nt1)) status=nf_put_var_double(ncid,wakx_id,wakx(nt1)) status=nf_put_var_double(ncid,waky_id,waky(nt1)) status=nf_put_var_double(ncid,wxsp_id,wxsp(nt1)) status=nf_put_var_double(ncid,utor_id,utor(nt1)) status=nf_put_var_double(ncid,upol_id,upol(nt1)) status=nf_put_var_double(ncid,grtmx_id,grtmx_s) status=nf_put_var_double(ncid,utim_id,utim_s) status=nf_put_var_double(ncid,timf_id,timf(ntf1)) status=nf_put_var_double(ncid,avgflag_id,avgflag) status=nf_put_var_text(ncid,date_id,date) status=nf_put_var_text(ncid,note_id,note) status=nf_put_var_double(ncid,rmass_id,rmass) status=nf_put_var_double(ncid,charge_id,charge) status=nf_put_var_double(ncid,n_I_id,n_I) status=nf_put_var_double(ncid,Ln_id,Ln) status=nf_put_var_double(ncid,eta_id,eta) status=nf_put_var_double(ncid,eta_par_id,eta_par) status=nf_put_var_double(ncid,tau_id,tau) status=nf_put_var_double(ncid,phisq_id,phisq_s) status=nf_put_var_double(ncid,fluximn_id,fluximn_s) status=nf_put_var_double(ncid,qfluximn_id,qfluximn_s) status=nf_put_var_double(ncid,fluxemn_id,fluxemn_s) status=nf_put_var_double(ncid,qfluxemn_id,qfluxemn_s) status=nf_put_var_int(ncid,icrit_id,icrit) status=nf_put_var_int(ncid,ntimf_id,ntimf) status=nf_put_var_double(ncid,time_id,time) status=nf_put_var_double(ncid,dt_id,dt) status=nf_put_var_double(ncid,rkperp2_id,rkperp2_s) c close file (now done by calling routine) c STATUS = NF_CLOSE(NCID) c return END cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc SUBROUTINE HANDLE_ERR(STATUS) INCLUDE 'netcdf.inc' INTEGER STATUS IF (STATUS .NE. NF_NOERR) THEN PRINT *, NF_STRERROR(STATUS) c STOP 'Stopped' ENDIF END