Problema con l'output di dati

di il
17 risposte

Problema con l'output di dati

Salve, essendo il mio primo post mi presento, sono un laureando in Ingegneria civile quindi non mi intendo molto del linguaggio c++ e mi sono avvicinato a questo mondo per la mia tesi. Ho scaricato il codice sorgente di un programma open source ed ho dovuto inserire un nuovo file. Chiaramente non essendo esperto ho iniziato con un file simile e ho modificato quello. Al momento sono riuscito a scrivere tutto ciò che dovevo ma proprio nella fase di output ho un problema. il mio codice, utilizzando dei parametri inseriti dall'utente, crea una curva sul piano x-y, con x variabile, il problema è che una volta creata la curva vorrei dividere il valore di x per un parametro sempre inserito dall'utente e non riesco a farlo, nonostante io cambi il codice nella parte di output non ho nessuna variazione. inserisco un pezzo del codice nel caso non sia chiaro oppure serva altro posterò a parte che serve


int
{
SteelSte::setTrialStrain(double trialStrain, double strainRate)
....

eps = trialStrain;

u = eps * 2 / lp;

.......

}


double
SteelSte::getStrain(void)
{

return u;
}


nonostante nella parte getStrain io gli dica di avere u ho comunque come output trialStrain che è la variabile x che utilizzo per costruire la curva. Probabilmente non ho utilizzanto la terminologia esatta ma spero sia comunque comprensibile. Grazie a chiunque risponda!

17 Risposte

  • Re: Problema con l'output di dati

    Ma cosa è u? Dove è dichiarata?
  • Re: Problema con l'output di dati

    U è dichiarata nel file.h

    #ifndef SteelSte_h
    #define SteelSte_h

    #include <UniaxialMaterial.h>

    class SteelSte : public UniaxialMaterial
    {
    public:
    SteelSte(int tag, double ES, double FY, double L, double DS, double TD, double U1, double KH, double lp);


    SteelSte(void);

    virtual ~SteelSte();

    const char *getClassType(void) const {return "SteelSte";};
    double getInitialTangent(void);
    UniaxialMaterial *getCopy(void);

    int setTrialStrain(double strain, double strainRate = 0.0);
    double getStrain(void);
    double getStress(void);
    double getTangent(void);

    int commitState(void);
    int revertToLastCommit(void);
    int revertToStart(void);

    int sendSelf(int commitTag, Channel &theChannel);
    int recvSelf(int commitTag, Channel &theChannel,
    FEM_ObjectBroker &theBroker);

    void Print(OPS_Stream &s, int flag =0);

    double u;
    protected:

    private:
    .......

    };
  • Re: Problema con l'output di dati

    Addirittura come membro pubblico ... e perché mai?

    Comunque se hai problemi con il valore di u vuol dire che questo viene cambiato in altre parti del codice che non hsi mostrato.
  • Re: Problema con l'output di dati

    In realtà anche se lo metto come privato non cambia granchè e no il valore di u l'ho creato soltanto per dividere eps ovvero trialStrain che da quello che so è la variabile x, anche se al posto di u metto:

    double
    SteelSte::getStrain(void)
    {

    return eps*2/lp;
    }

    non cambia nulla, dove eps è sempre nel file.h in

    private:

    double eps;
  • Re: Problema con l'output di dati

    A parte il fatto che public e private è solo una questione di architettura della classe io non ho ancora capito il tuo problema.

    Hai fatto debugging per controllare i valori durante l'esecuzione? Spiegati meglio magari con dei valori che ottieni per capirti...
  • Re: Problema con l'output di dati

    Una volta compilato il tutto ottengo il programma e utilizzando dei file tcl trovo la mia curva x-y, il mio problema è che il valore di x che trovo vorrei fosse diviso per una costante, lp, per fare ciò ho pensato che dovessi andare a modificare la parte di getStrain poichè da quello che so è proprio quello il valore di x che utilizza. Al momento quindi la mia variabile è trialStrain=eps, e questo è il valore che utilizza come x, io invece voglio dividere questo valore per lp, soltanto però nella fase di output
  • Re: Problema con l'output di dati

    Per spiegarmi meglio spiego il problema in modo fisico e ciò che sto realizzando magari risulta più chiaro: la curva x-y è una curva spostamento-forza, dove una volta compilato il programma tramite un file tcl, viene creata una barra e viene sottoposta ad uno spostamento, ora io come risultati ho una curva che descrive sulle x gli spostamenti imposti e sulle y la forza. Vorrei però sulle x uno spostamento diviso una costante ovvero lp, quindi volevo modificare il valore di x che prende in fase di output il mio codice andando a dividere lo spostamento (x) con una costante. spero di essere stato più chiaro e intanto grazie per l'aiuto
  • Re: Problema con l'output di dati

    A parte che moltiplichi anche per 2, non modificare la classe ma fai l'operazione quando stai per fare l'output
  • Re: Problema con l'output di dati

    Si si so di moltiplicarlo per 2, e anche se inserisco

    double
    SteelSte::getStrain(void)
    {
    u = eps*2/lp
    return u ;
    }

    non ho nessuna variazione, è questo che intendi per fare l'operazione e non modificare la classe?
  • Re: Problema con l'output di dati

    No

    Intendo

    return eps/2;

    e quando ti serve dividi per lp
  • Re: Problema con l'output di dati

    Il problema è che questa curva deve essere già x*2/lp, non posso farlo manualmente dopo, poichè deve essere inserita in altri modelli ed hanno bisogno della scrittura u=x*2/lp, quindi deve essere quello il valore di output
  • Re: Problema con l'output di dati

    Scusa ma non ho ancora capito il problema e ti assicuro che tu non aiuti a capirlo
  • Re: Problema con l'output di dati

    Allora provo a rispiegarmi...ho scaricato il codice sorgente di un programma open source, in particolare il programma è Opensees, ho creato un file simile ad uno già presente nel codice sorgente in modo tale da avere una traccia da seguire. Il mio scopo è: creare un nuovo materiale in modo tale che un utente del programma opensees possa assegnare il mio materiale ad un elemento e applicando degli spostamenti possa leggere la curva forza spostamento dell’elemento, tutto ciò anche nel caso in cui siano presenti altri materiali oltre al mio.

    Per fare ciò devo descrivere nel codice una curva forza-deformazione..

    Nel codice sono presenti varie sezioni tra cui:

    SetTrialStrain
    Nel quale viene utilizzato un file di input .txt dove sono presenti i valori di x (spostamento) e tramite delle funzioni y=f(x) trovo la y (forza)

    Mentre poi ci sono due sezioni che da quello che ho capito sono quelle che indicano al programma i valori di output ovvero:

    GetStrain
    Dove è presente l’Output di x (spostamento)

    GetStress
    Dove è presente l’output di y (forza)

    Questo è tutto ciò che ho ottenuto al momento..
    Ora il problema che riscontro è il fatto che non voglio forza-spostamento in output bensì forza-deformazione, che in questo caso si ottiene dividendo i valori di x per “lp” e moltiplicandoli per 2.

    Quindi ho provato a modificare nella sezione Getstrain il valore di x ma non ho nessuna variazione, mentre nel caso in cui io cambi qualcosa nella sezione Getstress ho delle variazioni sulle y di output.
  • Re: Problema con l'output di dati

    Spero di essere stato più chiaro sul problema da me riscontrato
Devi accedere o registrarti per scrivere nel forum
17 risposte