in
La comunità italiana dedicata a Sviluppatori e Architetti IT delle piattaforme Windows

[FORTRAN -> C++] SUBROUTINE -> VOID for abaqus simulation

Ultimo messaggio ricevuto il 12-06-2007 18.56 da alorenzom. 0 risposta(e).
Pagina 1 di 1 (1 elemento/i)
Ordina messaggi: Precedente Successivo
  • 12-06-2007 18.56

    [FORTRAN -> C++] SUBROUTINE -> VOID for abaqus simulation

    Sto usando abaqus, una suite di programmi per simulazioni di ingegneria. Devo lanciare una simulazione usando una user subroutine. Ho scritto la user subroutine in fortran (linguaggio consigliato da abaqus support) e la cosa è andata a buon fine. Mi hanno chiesto di scrivere la subroutine in C++ (Abaqus support dice che si può fare...

    It is possible to write user subroutines for ABAQUS/Standard in C++, but it is generally recommended that user subroutines be written in Fortran. The interface for each of the user subroutines in ABAQUS/Standard is in Fortran, and the use of another programming language adds an additional layer of complexity to the programming task.

    ).
    La versione in c++ della mia subroutine mi da dei problemi.

    Ci sono differenze fra i seguenti codici?

     

    [CODE]

    #define FOR_NAME(lc_name,uc_name) _stdcall uc_name
    #define CALL_NAME(lc_name,uc_name) uc_name
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    extern "C" void
    FOR_NAME(uel, UEL)(double** RHS_,double** AMATRX_,double* pSvars,double* pEnergy,int* pNdofel,int* pNrhs,
    int* pNsvars,double* pProps,int* pNprops,double** pCoords,int* pMcrd,int* pNnode,double* pU,double** pDu,double* pV,double* pA,int* pJtype,double* pTime,double* pDtime,
    int* pKstep,int* pKinc,int* pJelem,double* pParams,int* pNdload,int** pJdltyp,double** pAdlmag,double*** pPredef,
    int* pNpredf,int* pLflags,int* pMlvarx,double** pDdlmag,int* pMdload,double* pPnewdt,int* pJprops,int* pNjprop,
    double* pPeriod){
    
    	AMATRX_ = new double*[*pNdofel];
    	for(int i=0; i<*pNdofel; i++)
    		AMATRX_Idea = new double[*pNdofel];
    
    	RHS_ = new double*[*pMlvarx];
    	for(int i=0; i<*pMlvarx; i++)
    		RHS_Idea = new double[1];
    
    	pDu = new double*[*pMlvarx];
    	for(int i=0; i<*pMlvarx; i++)
    		pDuIdea = new double[1];
    
    	pU = new double[*pNdofel];
    
                .... istruzioni per il calcolo delle componenti di pAmatrx e pRhs....
    }
    

    [/CODE]

     

    [CODE]

          SUBROUTINE UEL(RHS,AMATRX,SVARS,ENERGY,NDOFEL,NRHS,NSVARS,
         1     PROPS,NPROPS,COORDS,MCRD,NNODE,U,DU,V,A,JTYPE,TIME,DTIME,
         2     KSTEP,KINC,JELEM,PARAMS,NDLOAD,JDLTYP,ADLMAG,PREDEF,
         3     NPREDF,LFLAGS,MLVARX,DDLMAG,MDLOAD,PNEWDT,JPROPS,NJPROP,
         4     PERIOD)
    C    
           DIMENSION RHS(MLVARX,*),AMATRX(NDOFEL,NDOFEL),
         1     SVARS(NSVARS),ENERGY(8),PROPS(*),COORDS(MCRD,NNODE),
         2     U(NDOFEL),DU(MLVARX,*),V(NDOFEL),A(NDOFEL),TIME(2),
         3     PARAMS(3),JDLTYP(MDLOAD,*),ADLMAG(MDLOAD,*),
         4     DDLMAG(MDLOAD,*),PREDEF(2,NPREDF,NNODE),LFLAGS(*),
         5     JPROPS(*)
    C
              ..........istruzioni per il calcolo delle componenti di AMATRX e RHS....
    C
          RETURN
          END

    [/CODE]
    Ho stampato pAmatrx (AMATRX) e pRhs (RHS) e sono uguali.

    PERFAVORE DITEMI QUELLO CHE SAPETE A RIGUARDO!!!!!!!!!!!!!!! grazie in anticipo

    • Log
Pagina 1 di 1 (1 elemento/i)
Prelevato da http://www.devspy.com/forums/p/4533/5574.aspx
DevSpy.com 6.0 © 2001-2008 - Alcuni Diritti Riservati
Salvo diversa indicazione, tutti i contenuti sono pubblicati sotto licenza "Creative Commons Attribution-Share Alike 3.0"