Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Fortran -> C++]DIMENSION -> ?

    Vorrei fare in C++ quello che in fortran si fa':

    codice:
    DOUBLE PRECISION MATRIX
    INTEGER N
    ...
    DIMENSION MATRIX(N,N)
    è giusto fare come segue?

    codice:
    int n;
    ...
    double** pMatrix = new double*[n];
    for(int i=0; i<n; i++)
       pMatrix[i] = new double[n];
    queste 2 allocazioni sono identiche o no?

  2. #2
    Ciao ...
    E' corretto: prova anche te:
    codice:
        int n = 10;
        double** matrix = new double*[n];
        for(int i=0; i<n; i++)
           matrix[i] = new double[n];
        {
        int app = 0;
        for (unsigned int i = 0; i < n; i++)
          for (unsigned int j = 0; j < n; j++)
             matrix[i][j] = app++;
        }
        for (unsigned int i = 0; i < n; i++)
           {
           for (unsigned int j = 0; j < n; j++)
              cout << matrix[i][j] << '\t';
           cout << endl;
           }
    Experience is what you get when you don’t get what you want

  3. #3

    [Fortran -> C++]subroutine() -> void()

    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 è stato chiesto di scrivere la subroutine in C++ (Abaqus support dice che si può fare).
    La versione in c++ mi da dei problemi.

    Ci sono differenze fra i seguenti codici?

    codice:
    #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_[i] = new double[*pNdofel];
    
    	RHS_ = new double*[*pMlvarx];
    	for(int i=0; i<*pMlvarx; i++)
    		RHS_[i] = new double[1];
    
    	pDu = new double*[*pMlvarx];
    	for(int i=0; i<*pMlvarx; i++)
    		pDu[i] = new double[1];
    
    	pU = new double[*pNdofel];
    
                .... istruzioni per il calcolo delle componenti di pAmatrx e pRhs....
    }
    codice:
          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
    Ho stampato pAmatrx (AMATRX) e pRhs (RHS) e sono uguali.

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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.