subroutine nonlin(density1, u_par1, t_par1, q_par1, t_perp1, q_perp1, phi) use itg_data use nl, only: nlpsc use flr_terms, only: phi_flr1, phi_flr2, phi_u implicit none complex, dimension(:,:,:) :: phi complex, dimension(:,:,:,:) :: density1, u_par1, t_par1, q_par1, t_perp1, q_perp1 integer i ! ! We must calculate {a,b} for a,b=: ! uv,w uv,tpar uv,v uv,T ! uv,q uv,qpar uflr,w uflr,T ! uflr,v uflr2,T uflr2,q ! ! In each case we want to pass the two variables' real and ! imaginary parts to a subroutine which will return the real ! and imaginary parts of {a,b} in (x,ky,kz) space. ! ! ! Usual NL terms unless iflr=6, then do like Ron ! if (iflr.ne.6) then do i=1,nspecies call nlpsc(0,phi_flr2(:,:,:,i),t_perp1(:,:,:,i),nl_tperp3(:,:,:,i),ldb) call nlpsc(2,phi_flr1(:,:,:,i),t_perp1(:,:,:,i),nl_density2(:,:,:,i),ldb) call nlpsc(1,phi_flr1(:,:,:,i),density1(:,:,:,i),nl_tperp2(:,:,:,i),ldb) call nlpsc(2,phi_u(:,:,:,i),density1(:,:,:,i),nl_density1(:,:,:,i),ldb) call nlpsc(1,phi_u(:,:,:,i),t_par1(:,:,:,i),nl_tpar(:,:,:,i),ldb) call nlpsc(1,phi_u(:,:,:,i),u_par1(:,:,:,i),nl_upar1(:,:,:,i),ldb) call nlpsc(1,phi_u(:,:,:,i),t_perp1(:,:,:,i),nl_tperp1(:,:,:,i),ldb) if(nparmom == 4) call nlpsc(1,phi_u(:,:,:,i),q_par1(:,:,:,i),nl_qpar(:,:,:,i),ldb) if(nperpmom == 2) then call nlpsc(1,phi_u(:,:,:,i),q_perp1(:,:,:,i),nl_qperp1(:,:,:,i),ldb) call nlpsc(2,phi_flr2(:,:,:,i),q_perp1(:,:,:,i),nl_qperp3(:,:,:,i),ldb) call nlpsc(2,phi_flr1(:,:,:,i),q_perp1(:,:,:,i),nl_upar2(:,:,:,i),ldb) call nlpsc(1,phi_flr1(:,:,:,i),u_par1(:,:,:,i),nl_qperp2(:,:,:,i),ldb) endif enddo call reality (nl_tperp3) call reality (nl_density2) call reality (nl_tperp2) call reality (nl_density1) call reality (nl_tpar) call reality (nl_upar1) call reality (nl_tperp1) if(nparmom == 4) call reality (nl_qpar) if(nperpmom == 2) then call reality(nl_qperp1) call reality(nl_qperp2) call reality(nl_qperp3) call reality(nl_upar2) endif else ! ! Like Ron (3+1 assumed) ! do i=1,nspecies call nlpsc(0,phi,density1(:,:,:,i),nl_density1(:,:,:,i),ldb) call nlpsc(1,phi,u_par1(:,:,:,i),nl_upar1(:,:,:,i),ldb) call nlpsc(1,phi,t_par1(:,:,:,i),nl_tpar(:,:,:,i),ldb) call nlpsc(1,phi,t_perp1(:,:,:,i),nl_tperp1(:,:,:,i),ldb) enddo call reality(nl_density1) call reality(nl_upar1) call reality(nl_tpar) call reality(nl_tperp1) endif contains subroutine reality(a) complex, dimension(:,:,:,:) :: a integer :: n ! ! enforce reality condition (should be unnecessary, but cheap to do): ! do n=1,nddm a(:,1,nddp+n,:)=conjg(a(:,1,nddp+1-n,:)) enddo end subroutine reality end subroutine nonlin